c语言水仙花数的求解?

大一新生 求大佬帮忙看看这个c语言哪里出错🌚
顺便教教我怎么做 谢谢
#include<stdio.h>
int no_of_digits(int x)
{
int w,n;
for(w=10,n=1;x/w==0;w*=10)
n=n+1;
return n;
}
int power(int x, int y)
{
int i,num=1;
for(i=1;i<y+1;i++)
num=num*x;
return num;
}
int is_narciss(int x)
{
int i,n,sum;
sum=0;
n=no_of_digits(x);
for(i=1;i<=n;i++)
{
sum+=power(x%10,n);
x/=10;
}
return sum;
}
int main(void)
{
int x,s;
for(x=0;x<1000000;x++)
{
s=is_narciss(x);
if(s==x)
printf("%d\n",s);
}
return 0;
}

有两处错误:
第一处:for(w=10,n=1;x/w==0;w*=10) 这里应该是 x/w != 0
第二处:sum+=power(x%10,n); //这里应该是 sum+=power(x%10,3); 水仙花是各位数的立方和,所以power的第二个参数是3。
完整代码如下,如有帮助,请帮忙采纳一下,谢谢。

#include<stdio.h>
int no_of_digits(int x)
{
    int w,n;
    for(w=10,n=1;x/w!=0;w*=10) //修改1
        n=n+1;
    return n;
}
int power(int x, int y)
{
    int i,num=1;
    for(i=1;i<y+1;i++)
        num=num*x;
    return num;
}
int is_narciss(int x)
{
    int i,n,sum;
    sum=0;
    n=no_of_digits(x);
    for(i=1;i<=n;i++)
    {
        sum+=power(x%10,3); //修改2
        x/=10;
    }
    return sum;
}
int main(void)
{
    int x,s;
    is_narciss(123);
    for(x=0;x<1000000;x++)
    {
        s=is_narciss(x);
        if(s==x)
            printf("%d\n",s);
    }
    return 0;
}

http://c.biancheng.net/view/504.html

#include <stdio.h>
int main()
{
    int hun, ten, ind, n;
    printf("result is:");
    for( n=100; n<1000; n++ )  /*整数的取值范围*/
    {
        hun = n / 100;
        ten = (n-hun*100) / 10;
        ind = n % 10;
        if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind)  /*各位上的立方和是否与原数n相等*/
            printf("%d  ", n);
    }
    printf("\n");
   
    return 0;
}