年龄:18
代码:
#include<stdio.h>
#include<math.h>//pow(x,y) x的y次方
//判断数组a中的所有数字是否有相同的
//numOfWeiShu : array length
int check_arr(int a[],int numOfWeiShu){
int i = 0, j = 0;
for ( i = 0; i < numOfWeiShu ; i ++){
for ( j = i + 1; j < numOfWeiShu ; j ++){
if ( a[i] == a[j]){
return -1;
}
}
}
return 1;
}
//判断n位数是否满足条件:每个位上的数字都各不相同
//21345满足条件,21315不满足条件
//numOfWeiShu : 位数
int check_if_right(int num,int numOfWeiShu){
int a[numOfWeiShu], i = 0, j = 0;
for ( ; i < numOfWeiShu ; i ++){
a[i] = num / (int)pow((double)10 , (numOfWeiShu - i - 1));
a[i] = a[i] % 10;
}
return check_arr(a,numOfWeiShu);
}
//判断num是否n位整数:1234 是 4位整数, 231245 是 6位整数,123不是4位整数,12345不是6位整数
int check_is_n(int num,int n){
int a = 1;
a = (int)pow((double)10,n - 1) ;
if( (num / a) > 9 || (num / a) < 1){
return -1;
}
else{
return 1;
}
}
int getAge(){
int i=0,j=0;
int num2 = 9,num3 = 0,num4 = 0;//年龄的2次方、3次方、4次方
//double num5 = 0; //年龄的3次方、4次方拼接起来 num5 = num3 * 1000000 + num4;
int arr[10];
for ( i = 11; i < 32; i ++){
num2 = (int)pow((double)i,2);
if (check_is_n(num2,3) == 1){//年龄的2次方是3位数
num3 = (int)pow((double)i,3);
//年龄的3次方是4位数 && 该数的每个位置上的数字不重复
if ( check_is_n(num3,4) == 1 && check_if_right(num3,4) == 1){
num4 = (int)pow((double)i,4);
if ( check_is_n(num4,6) == 1 && check_if_right(num4,6) == 1){
//printf("%d\t%d\t%d\n",i,(int)pow((double)i,3),(int)pow((double)i,4));
//把年龄的3次方、4次方两个数字所有位数放一起检查有无重复的数字出现,没有则找到了正确的年龄
for(j = 0; j < 4; j ++){
arr[j] = num3 / (int)pow((double)10,4 - j - 1);
arr[j] = arr[j] % 10;
}
for(j = 0; j < 6; j ++){
arr[j+4] = num4 / (int)pow((double)10,6 - j - 1);
arr[j+4] = arr[j+4] % 10;
}
if (check_arr(arr,10) == 1){
return i;
}
}
}
}
}
return -1;
}
int main(){
printf("age:%d\n",getAge());
return 0;
}
运行结果:
年龄 年龄立方 年龄4次方