鱼C论坛

 找回密码
 立即注册
查看: 1123|回复: 2

[已解决]判断完数

[复制链接]
发表于 2023-11-8 12:52:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个数如果恰好等于他的因子之和就称为完数,例: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;
}
最佳答案
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重新置零,然后再进行累加。这样就能正确判断出一千以内的所有完数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-8 12:53:06 | 显示全部楼层
【系统公告】2023/11/8 11:52 站长的openai账号被大量封禁,目前已不够支持服务,请各位稍安勿燥, 将尽快恢复服务

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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重新置零,然后再进行累加。这样就能正确判断出一千以内的所有完数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 21:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表