输入 3
输出 153 370 371 407
输入 5
输出 54748 92727 93084
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d", &n);//输入你想得到n位数中的水仙花数
int i;//循环变量
int first = 1;
int final;//记录一个初始的n位数
for (i = 1; i < n; i++) {
first *= 10;
}//得到一个x位数以1开头后面n-1个0
int number = first;//让number去进行不断的遍历 从first到first*10
//不断让number++,如果n=5.那么就是从10000一直遍历到100000
while ( number < first * 10) {
final = number;//final代替number 进入水仙花判读循环
//判断是否水仙花数
int sum = 0;//水仙花数判断
while (final > 0) {
int m ;
int z;
m = final % 10;
z = pow(m, n);
sum += z;
final /= 10;
}
//判断和输出
if (sum == number) {
printf("%d ", number);
}
sum = 0;
number++;
}
return 0;
}
缺点是需要遍历所有的范围数字,比较费时