未来可期 2023-03-25 21:43 采纳率: 100%
浏览 68
已结题

C语言完数代码求改(大一)

大一初学C语言,想写一个若输入范围内没有完数,则输出error,但现在问题是貌似不经过if结构直接有没有完数都在结尾输出error,代码写的有点乱,帮忙看一下(已经改了好多版了),谢谢,麻烦了

完数是指一个整数恰好等于它的因子之和(除自身外),则称这个数为完数。从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。

【输入形式】
先后输入两个正整数m和n,用逗号分隔

【输出形式】

输出所有完数,每两个数之间用逗号分隔。若输入非法,则输出“error”

【样例输入】

1,2000

【样例输出】

6,28,496

【样例说明】

【评分标准】

正确性

#include<stdio.h>
int main(){
    int m,n,a,b,c,sum;
    int flag=0;
    scanf("%d,%d",&m,&n);
    if(m>9999||n>9999) printf("error");
    else {if(m>n){
        int temp;
        temp=n;
        n=m;
        m=temp;
     }
     for(a=m;a<=n;a++){
         sum=0;
         c=0;
         for(b=1;b<a;b++){
              if(a%b==0) sum=sum+b; 
             }
        if(sum==a){
           c=c+1;
           if(flag==0){
               flag=1;
               printf("%d",a);
             }
           else printf(",%d",b);
         }
     }  
    if(c==0) printf("error"); 
    }
    return 0;
}

  • 写回答

4条回答 默认 最新

  • 海洋 之心 2022年度博客之星人工智能领域TOP 1 2023-03-25 21:51
    关注

    在你的代码中,输出 error 的语句在 for 循环外部,因此无论是否存在完数,都会输出 error。此外,在输出完数时,你使用变量 b 来输出完数,但是这个变量实际上记录的是因子的值,而非完数本身。因此,你需要进行如下修改:

    1. 将输出 error 的语句移到合适的位置,例如可以放在判断范围是否合法的 if 结构内部。

    2. 在输出完数时,使用变量 a 来代替原来的变量 b。

    下面是修改后的代码:

    #include <stdio.h>
    
    int main() {
        int m, n, a, b, sum, flag = 0, hasPerfectNumber = 0;
        scanf("%d,%d", &m, &n);
        if (m > 9999 || n > 9999) {
            printf("error");
        } else {
            if (m > n) {
                int temp = n;
                n = m;
                m = temp;
            }
            for (a = m; a <= n; a++) {
                sum = 0;
                for (b = 1; b < a; b++) {
                    if (a % b == 0) {
                        sum += b;
                    }
                }
                if (sum == a) {
                    hasPerfectNumber = 1;
                    if (flag == 0) {
                        flag = 1;
                        printf("%d", a);
                    } else {
                        printf(",%d", a);
                    }
                }
            }
            if (hasPerfectNumber == 0) {
                printf("error");
            }
        }
        return 0;
    }
    

    在这个修改后的代码中,首先判断输入的范围是否合法,如果不合法则直接输出 error。在判断完数时,如果存在完数,则将变量 hasPerfectNumber 的值设为 1,表示已经找到完数。在输出完数时,使用变量 a 代替原来的变量 b,同时使用 flag 变量来控制输出逗号的位置。最后,如果不存在完数,则输出 error。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源