C解决:水仙花数字,给定一个N位整数(N>=3),它的每个位上的数字的N次幂之和等于它本身
例如:例如153 = 1^3 + 5^3 +3^3,求所有N位水仙数
输入:3
输出:
153
370
371
407
思路:
1、输入一个N后,可以得出要找水仙数的范围是[10^(n-1),10^n),左闭右开区间
2、对于区间的每一个数字,将该数字的每一位取出来做sum+=digit^n
3、最终得到的sum与原数字比较,若相等则是水仙数,进行输出
注意:取出每一位数字可见:http://t.csdn.cn/eGG8g
代码:
#include<stdio.h>
#include<math.h>
int judgeIsSxs(int num,int n) {
int sum = 0;
while (num > 0) {
int digit = num % 10;
num /= 10;
sum += pow(digit, n);
}
return sum;
}
int main()
{
/* 水仙花数字,给定一个N位整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。
例如153 = 1^3 + 5^3 +3^3,求所有N位水仙数
*/
int n;
scanf_s("%d", &n);
int num = pow(10, n - 1);
while (num < pow(10 , n)) {
int t = judgeIsSxs(num, n);
if (t == num) {
printf("%d\n",t);
}
num++;
}
return 0;
}
运行结果截图: