水仙花数问题 不知道哪里错了很离奇

已经检查了好久 没办法了
注释打了一些
题目是这样

img

img

这是我的答案

int narcissistic( int number ){
    int sum=0 , Number=number;//备份number
    while(number!=0){
        sum+=(number%10)*(number%10)*(number%10);  // 把最后一位数立方运算
        number=number/10;                           //把最后一位数扔掉
    }
    if(Number==sum){ 
        return 1;
    }else{
        
        return 0 ;
    }
}
void PrintN( int m, int n ){
    m++;//因为题目要求边界值另外判断 这里跳过不作判断
    while(m<n){
        if(narcissistic(m)==1){
            printf("%d\n",m);
        }
     m++;
    }
}

你好,函数内部第一次调用申明的sum=0,后面不会再调用这个申明所赋的值,所以之后的每次调用sum都是上次调用得到的,正确的做法分开写

int sum;
sum = 0;

既要三位数,又要四位数,判断一下就行

int narcissistic( int number ){
    int sum=0 , Number=number, ndigit;//备份number
    ndigit = 0;
    while(number!=0){number/=10; ndigit++;//先把位数计算好 
    }
    number = Number;
    while(number!=0){
        if(ndigit==3)
        sum+=(number%10)*(number%10)*(number%10);//如果三位数那就乘三次 
        else if(ndigit==4)
        sum+=(number%10)*(number%10)*(number%10)*(number%10);//如果四位数那就乘四次 
          // 把最后一位数立方运算
        number=number/10;                           //把最后一位数扔掉
    }
    if(Number==sum){ 
        return 1;
    }else{
        return 0 ;
    }
}
void PrintN( int m, int n ){
    m++;//因为题目要求边界值另外判断 这里跳过不作判断
    while(m<n){
        if(narcissistic(m)==1){printf("%d\n",m);
        }
     m++;
    }
}

哦,晕了。在VS2010上调试,没毛病啊,输出水仙花数了啊

什么样的错误提示?这代码没看出有问题。