TuringQi 2021-09-16 16:00 采纳率: 88.2%
浏览 47
已结题

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

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

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++;
    }
}

  • 写回答

3条回答 默认 最新

  • joel_1993 2021-09-16 16:04
    关注

    你好,函数内部第一次调用申明的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++;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 创建了问题 9月16日

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制