王小二° 发表于 2023-11-14 13:15:06

帮忙看看

#include <stdio.h>

int main()
{
   int m,n,s;
        for (m=2;m<1000;m++)
        {
                s=0;
                for(n=1;n<=m;n++)
                if(m%n==0)
                                s+=n;
       
                        if(s==m) printf("%d",m);
        }
       
       
        return 0;

}
题目是求出1~1000的自然数中的所有完数(因子和等于该数本身的数),如6=1+2+3
请问我的程序错在哪里啊,为什么没有输出呢?

isdkz 发表于 2023-11-14 13:15:07

你的程序中存在一些小错误。首先,你的程序没有在输出完数时打印换行符,导致输出结果会在同一行上。其次,你的程序没有正确计算完数,因为你的循环条件和条件判断有误。以下是你需要修改的程序:

#include <stdio.h>

int main()
{
    int m, n, s;
    for (m = 2; m <= 1000; m++)
    {
      s = 0;
      for (n = 1; n < m; n++)
      {
            if (m % n == 0)
            {
                s += n;
            }
      }

      if (s == m)
      {
            printf("%d ", m); // 输出完数
      }
    }

    return 0;
}


在修改后的程序中,我将外层循环的条件改为 m <= 1000 ,这样可以包括1000在内。同时,内层循环的条件改为 n < m ,因为我们不需要将m本身计算在内。另外,我在输出完数时添加了一个空格,以便在结果中进行分隔。

王小二° 发表于 2023-11-14 13:29:33

isdkz 发表于 2023-11-14 13:15
你的程序中存在一些小错误。首先,你的程序没有在输出完数时打印换行符,导致输出结果会在同一行上。其次, ...

你好,这个题只能在两个if语句里面改动
页: [1]
查看完整版本: 帮忙看看