我写的完数代码到底有啥问题,求各位指正

#include <stdio.h>
int main(void)
{
int i,sum=0,j;
for(i=2;i<1000;i++)
for(j=1;j<i;j++)
{ sum=0;
if(i%j==0){
sum+=j;
if(i==sum)
printf("完数为%-5d",i);
}
}
return 0;
}

-

写的很不规范,不知道是你粘贴的问题还是什么,主要有着几点,外层循环你没有加花括号,另外return下面的那两个花括号也不对,按着你写的逻辑,输出应该放在外层循环里面,而不是内层,想想也知道呀,你放到内层运行,i的值在内层里每一轮循环都是固定的值,每次内层for循环你都要判断,这不是做了多余的循环吗?打印也会出现多个重复符合条件的


关于for或者if的花括号问题,是含有一个语句的时候可以省略,多个语句或者一个代码段都不能省略,为了代码规范性你直到什么时候可以省略即可,一般你自己书写代码要讲究规范,通常就算只有一条语句最好也带上花括号


#include <stdio.h>
int main(void)
{
    int i, sum = 0, j;
    for (i = 2; i < 1000; i++)
    {
        sum = 0;
        for (j = 1; j < i; j++)
        {
            if (i % j == 0)
            {
                sum += j;
            }
        }
        if (i == sum)
            printf("完数为%-5d", i);
    }
    return 0;
}

#include <stdio.h>
int main(void)
{
    int i, sum = 0, j;
    for (i = 2; i < 1000; i++) {
        for (j = 1; j < i; j++)
        {
            if (i % j == 0) {
                sum += j;
            }
        }
        if (i == sum)
            printf("完数为%-5d", i);
        sum = 0;
    }
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632