我有以下程序,完美的数字不会打印,只输出数字1和2,这是不完美的。有什么不对,是范围问题还是循环?在print语句后添加break语句会导致输出所有数字1 - 99。
int sum = 0;
for (int i = 1; i < 100; i++) {
for (int j = 1; j <= i; j++) {
if (i % j == 0){
sum += j;}
if (sum == i){
printf("%d\n", i);
}
}
}
答案 0 :(得分:4)
三个问题:
sum
,i
必须初始化为零,而不仅仅是在开头j < i
,根据完整数字的定义,数字本身被排除在外sum == i
和printf
之后的检查必须移到内部循环之外,否则会打印中间结果答案 1 :(得分:1)
给出此代码,其中包含所有先前的评论/答案:
#include <stdio.h>
int main( void )
{
int sum = 0;
for (int i = 1; i < 100; i++)
{
sum = 0; // reset on each new number
for (int j = 1; j < i; j++)
{
if (i % j == 0)
{
sum += j;
} // end if
} // end for
if (sum == i)
{
printf("%d\n", i);
} // end if
} // end for
return 0;
} // end function: main
输出为6和28
答案 2 :(得分:0)
我认为你不需要一直测试我(j&lt; i)......它足以达到i / 2 ......
#include<stdio.h>
void main() {
int sum;
for (int i = 1; i < 100; i++) {
sum = 0;
for (int j = 1; j <= i/2; j++) {
if (i % j == 0) {
sum += j;
}
}
if (sum == i) {
printf("%d\n", i);
}
}
}