关于水仙花数如何解决

输出n位数全部的水仙花数

#include
int main(void)
{
    int n,min,max,k,i,bit,temp,sum=0;
    printf("Enter n(2);/*输入n*/ 
    scanf("%d",&n);
    min=pow(10,n);/*下限,比如n==3,min=100*/ 
    max=pow(10,n+1);/*上限限,比如n==3,max=1000*/
    for(i=min;i/*穷举min~max中的数*/
    {
        for(k=1;k<=n;k++)/*判断水仙花数*/
        {
            temp=i;
            bit=i%10;
            i=i/10;
            sum=sum+pow(bit,n);
        }
        if(sum==i)
        {
            printf("%d ",i);
        }
    }
    
    
    
    return 0;
 } 

运行结果及报错内容

img


可以通过编译,没有输出

1、内循环上增加 sum = 0; temp = i;
2、内循环内部只需要 sum += pow(temp % 10, n); temp /= 10;
代码参考:

#include<stdio.h>
#include<math.h>
int main(void) {
    int n, min, max, t, sum;
    printf("Enter n(2<n<8):");
    scanf("%d", &n);
    min = pow(10, n - 1);
    max = pow(10, n);
    for (int i = min; i < max; i++) {
        t = i;
        sum = 0;
        for (int j = 1; j <= n; j++) {
            sum += pow(t % 10, n);
            t /= 10;
        }
        if (sum == i) {
            printf("%d\n", i);
        }
    }
    return 0;
}

10和11行之间插入sum = 0;