水仙花数怎么实现?这么写为什么不行?

img

这个题目这么写为什么不成功?

#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i=1,first=1;
while(i<n)
{
first*=10;
i++;
}
i=first;
printf("i=%d\n",i);
while(i<first*10)
{
int t=i,sum=0;
do
{
int d=t%10;
t/=10;
int p=1,j=1;
while(j<n)
{
p*=d;
j++;
}
sum+=p;
//printf("sum=%d\n",sum);
}
while(t>0);
if(sum==i)
{
printf("%d",i);
}
i++;
}
}

你的代码大问题没有,只是int p=1,j=1;这行中,j的初始值错误,应该是j=0
你的代码实际这个循环只执行了n-1次,导致结果不对了。修改如下:

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int i=1,first=1;
    while(i<n)
    {
        first*=10;
        i++;
    }
    i=first;
    printf("i=%d\n",i);
    while(i<first*10)
    {
        int t=i,sum=0;
        if(t==153)
            int kk = 0;
        do
        {
            int d=t%10;
            t/=10;
            int p=1,j=0;
            while(j<n)
            {
                p*=d;
                j++;
            }
            sum+=p;
        }while(t>0);
        if(sum==i)
        {
            printf("%d\n",i);
        }
        i++;
    }
}

#include <stdio.h>
#include <math.h>
 
int main() {
    printf("输入一个正整数n:\n");
    int n;       //n位数
    scanf("%d",&n);
    int f=pow(10,n-1);
 
 
    //遍历n位数下的所有正整数
    for (int j = f; j < f*10; ++j) {
     int t=j;
     int sum=0;
        do {
            int d=t%10;
            t=t/10;
 
            sum+= pow(d,n);
        } while (t>0);
        if(sum==j){
            printf("%d\n",j);
        }
    }
    return 0;
}

img

img


#include <stdio.h>
#include <math.h>

int main()

{
    int a;
    int b,c;
    int m;
    int k;
    int l;
    l=0;
    k=0;
    scanf("%d",&a);
    b=pow(10,a);
    c=pow(10,a-1);
    for(m=c;m<b;m++){
        k=0;
        l=m;
        while(l>0){
            k+= (int)pow(l%10,a);
            l/=10;
        }
        if(m==k){
            printf("%d\n",m);
        }
    }
    return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632