大家看一下这两个代码有什么区别,为什么输出不一样,问题是求水仙花数

这是正确的


#include <stdio.h>

#include <math.h>

int main()
{
    int n,j,i;
    double start,reigon;
    scanf("%d",&n);
    start=pow(10,n-1);
    reigon=pow(10,n);
    for(i=start;i<reigon;i++)
    {
        int sum=0,temp=i;
        while(sum<=i&&temp!=0)
        {
            int mod=temp%10;
            int k=1;
            for(j=1;j<=n;j++)
                k=k*mod;
            sum=sum+k;
            temp /=10;
        }
        if(sum==i)
            printf("%d\n",i);
    }
    return 0;
}

这是错误的


#include <stdio.h>

#include <math.h>

int main()
{
    int n,j,i;
    double start,reigon;
    scanf("%d",&n);
    start=pow(10,n-1);
    reigon=pow(10,n);
    for(i=start;i<reigon;i++)
    {    int sum=0;
        int temp=i;
        while(sum<=i&&temp!=0)
        {
            int mod=temp%10;
            int k=1;
            for(j=1;j<=n;j++)
                k*=mod;
            sum+=k;
            temp/=10;
            
        }
        if(sum==i);
            printf("%d\n",sum);
    }
    return 0;
}

我实在找不出这两段代码有什么区别

区别在这里:
正确的: if(sum==i)
printf("%d\n",i);

错误的:
if(sum==i);
printf("%d\n",sum);

从百度百科找了个求水仙花数的代码:

//方法一
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int cube(const int n){
    return n*n*n;
}
bool
isNarcissistic(const int n){//判断是不是水仙花数
    int hundreds=n/100;
    int tens=n/10-hundreds*10;
    int ones=n%10;
    return cube(hundreds)+cube(tens)+cube(ones)==n;
}
int main(void){
    int i;
    for(i=100;i<1000;++i){
        if(isNarcissistic(i))
        printf("%d\n",i);
    }
    return 0;
}

参考链接:https://baike.baidu.com/item/%E6%B0%B4%E4%BB%99%E8%8A%B1%E6%95%B0/2746160?fr=aladdin