huafeng 发表于 2023-11-8 12:52:55

判断完数

一个数如果恰好等于他的因子之和就称为完数,例:6的因子为1,2,3,而6=1+2+3,所以为完数。
求一千以内的所有完数。
我这个程序不知哪里逻辑错了,能运行但没结果啊
#include<stdio.h>

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

Mike_python小 发表于 2023-11-8 12:53:06

【系统公告】2023/11/8 11:52 站长的openai账号被大量封禁,目前已不够支持服务,请各位稍安勿燥, 将尽快恢复服务

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-11-8 12:53:24

问题出在你没有在每次判断一个数是否为完数之前,将变量a重新置零。因此,在第二次判断时,a的值已经累加了上一次的结果,导致判断错误。以下是修改后的代码:

#include<stdio.h>

int main()
{
    int m, n, a;
    for (m = 1; m < 1000; m++)
    {
      a = 0; // 每次判断前将a置零
      for (n = 1; n < m; n++)
      {
            if (m % n == 0)
            {
                a = a + n;
            }
      }
      if (a == m)
            printf("%d ", m);
    }
    return 0;
}


这样,每次判断一个数是否为完数时,都会先将a重新置零,然后再进行累加。这样就能正确判断出一千以内的所有完数了。
页: [1]
查看完整版本: 判断完数