请教一下这如何解答。,(

img


#运行程序,输入一个正整数n,n大于等于3,小于等于7,计算n位水仙花数
#运行程序,输入一个正整数n,计算n位水仙花数

代码里 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试试