输出一直是1,哪里出问题了?

这个3-7位的水仙花,试了好几次,输出一直是1,到底哪里出现问题了,求解

img

img

{
int n;
scanf_s("%d", &n);
int a=1;
int b=1;
int sum = 0;
int h=0;
while (a < n) {
    b = b * 10;
    a++;
}
int t = b;
while (t < b * 10) {
    for (h = 0; h < n;h++) {
        int c = t / b;
        t = t % b;
        b /= 10;
        int d = c;
        int f = 1;4
        while (f < n) {
            int g = d * d;
            f++;
            if (f == n) {
                sum = sum + g;
            }
        }
    }
    t++;
    h = 0;
}
if (sum == t) {
    printf("%d", t);
}
return 0;


315-317的高位取值是有缺陷的我改成低位取值了;
311行的判断应该在while里不然永远输出最后一个t;
下面按你的思路不知道你能否看懂。。。。。



#include<iostream>
    using namespace std;
int main()
{
    int n;
    scanf_s("%d", &n);
    int a = 1;
    int b = 1;
    int sum = 0;
    int h = 0;
    while (a < n) {
        b = b * 10;
        a++;
    }
    int t = b;
    while (t < b * 10) {//100-1000
        int e = t;//t另存防止后期使用误改循环出错
        for (h = 0; h < n; h++) {//0-3/7
            int c = e%10;//取个位(用最高位法在执行1001时中间“0”位数被自动消去)
            e = e /10;//消除个位
            int g = 1;
            int f = 0;
            while (f < n){//循环n次
                g = g*c;//各个位数累乘n次
                f++;
                if (f == n){
                    sum = sum + g;
                }
            }
        }
    if (sum == t) {//判断在while中每次判断成立输出
        printf("%d\n", t);
    }
    sum = 0;//置0并重新下一次循环。
    int h = 0;
    t++;
    }
    system("pause");
    return 0;
}

323行,=改为==

代码贴出来看看

提供一个现成的,供参考:

#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;
}