来自武科大 oj 的一道简单题。
Description
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
例如:153 = 1^3+ 5^3+ 3^3153=13+53+33
要求编写程序,计算所有N位水仙花数。
Input
一个正整数N(3≤N≤8)
Output
按递增顺序输出所有N位水仙花数,每个数字占一行。
枚举法遍历,找出符合条件的数即可。代码如下。
#include <stdio.h>
//定义一个求数的N次幂函数,接收两个参数,num 数字和 times 幂的次数
int pow(int num, int times) {
int temp = num;
for (int i = 1; i < times; i++) {
num *= temp;
}
return num;
}
int main() {
int N, min, max;
scanf("%d", &N);
//min max 为上下界
min = pow(10, N - 1);
max = pow(10, N);
for (int i = min; i < max; i++) {
int num = i;
int sum = 0;
//循环求数字的每个位数的N次幂的和
while (num > 0){
sum += pow(num % 10, N);
num /= 10;
}
//相等即为水仙花数
if (i == sum) {
printf("%d\n", i);
}
}
return 0;
}