|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
问题出在你没有在每次判断一个数是否为完数之前,将变量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重新置零,然后再进行累加。这样就能正确判断出一千以内的所有完数了。
|
|