//手动输入要几位数的水仙花数
int n;
scanf("%d", &n);
int first = 1;
int i = 1;
while (i < n) { //确定范围的起始值 eg:3 1<3 first:10, i:2; 2<3 first:100, i:3;
first *= 10;
i++;
}
for (int i = first; i < first * 10; i++) {
int t = i; //t取n位数的范围内的数 eg:123
int sum = 0;
do {
int d = t % 10; //d存的个位数 d=3 d=2 d=1
t /= 10; //舍弃个位数后剩余的数 t=12 t=1 t=0
int p = d; //p为个位数 p=3 d=2
int j = 1;
while (j < n) { // 1<3 2<3 1<3 2<3
p *= d; //p=3*3 p=3*3*3 p=2*2 p=2*2*2
j++; //j = 2 j=3 j=2 j = 3
}
sum += p; // sum =3*3*3 sum = 3*3*3 +2*2*2
} while (t > 0); // t = 12 t=1
if (i == sum) {
printf("%d\n", i);
}
}
c语言 手动输入需要几位数的水仙花数
于 2024-07-23 18:56:58 首次发布