代码里 a = t%10; 应修改为:a=i%10; 以下类推 b c d e f 。题主的代码,只能算到三位的水仙花数,因为三位数时,a*a*a +b*b*b+c*c*c ,四位数时判断条件是:a*a*a*a + b*b*b*b+c*c*c*c+d*d*d*d ,依次类推。修改如下,供参考:
#include <stdio.h>
#include <math.h>
int main(){
int n;
scanf("%d", &n);
int a, b, c, d, e, f, g, j;
int t = (int)pow(10, n-1); //修改
for (int i = t; i < t * 10; i++) {
a = i % 10;
b = i / 10 % 10; // b = t % 100 / 10;
c = i / 100 % 10; //c=t%1000/100;
d = i / 1000 % 10; //d=t%10000/1000;
e = i / 10000 % 10;//e=t%100ooo/10000;
f = i / 100000 % 10;// f=t%10ooooo/100ooo;
if (a * a * a + b * b * b + c * c * c + d * d * d + e * e * e + f * f * f == i) //修改
//if (a * a * a + b * b * b + c * c * c + d * d * d + e * e * e + f * f * f + g * g * g == i)
printf("%d\n", i);
}
return 0;
}
满足题目要求的实现,供参考:
#include<stdio.h>
#include<math.h>
int main()
{
int N, i, p, t, sum, n, m, k;
printf("输入位数(3<=n<=7):");
scanf("%d", &N);
i = (int)pow(10, N - 1);
p = (int)pow(10, N);
for (; i < p; i++) {
for (sum = 0, t = i; t > 0; t /= 10) {
m = N; k = 1;
n = t % 10;
while (m--)k *= n;
sum += k;
}
if (sum == i) {
printf("%d\n", i);
}
}
return 0;
}
估计是int的位数不够,你换成long试试