水仙花数是指一个N
位正整数N≥3
,它的每个位上的数字的N
次幂之和等于它本身153=1^3+5^3+3^3
。本题要求编写程序,计算所有N
位水仙花数。
输入格式:
输入在一行中给出一个正整数N
(3≤N≤7)。
输出格式:
按递增顺序输出所有N
位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
Code
#include <stdio.h>
int pow_x(int x, int n){ //计算乘方
int y = 1;
for(int i = 0; i < n; i++)
y *= x;
return y;
}
int digtal(int n){ //计算位数
int count = 0;
while(n){
count++;
n /= 10;
}
return count;
}
int func(int n){ //判断水仙花数
int temp = digtal(n);
int arr[temp];
int i = 0;
int num = n;
while(n){
arr[i++] = n%10;
n /= 10;
}
int sum = 0;
for(int j = 0; j < i; j++)
sum += pow_x(arr[j], i);
return sum == num;
}
int main(){
int n;
scanf("%d", &n);
for(int i = pow_x(10, n-1); i < pow_x(10, n); i++)
if(func(i))
printf("%d\n", i);
return 0;
}