#include<stdio.h>
#include<math.h>
int weishu(int n);
int beichu(int n);
int *qushu(int n);
int main(int argc, char const *argv[])
{
for (int n=100;n<=9999;n++){
int *p=qushu(n);
int q=weishu(n);
int sum = 0;
for (int i=1;i<=q;i++){
sum+=(int)pow(*(p+i-1),q);
if (sum == n){
printf("%d\n",n);
break;
}
}
}
return 0;
}
int weishu(int n){//实现得到n的位数,如n=99,则返回2,即99是两位数
int nn = 1;
while (n>9){
n /=10;
nn ++;
}
return nn;
}
int beichu(int n){
int mask = 1;
for (int i = 0;i<(weishu(n)-1);i++){
mask *=10;
}
return mask;
}
int *qushu(int n){//实现取得n每个位置上的数,并且保存在s数组中
int s[weishu(n)];
int *p =s;
int i = 0;
int mask = beichu(n);
do{
int t = n;
s[i] = n / mask;
n = t % mask;
mask /= 10;
i++;
}while(mask >=1);
return p;
}
|