完数,一个数如果恰好等于它的因子之和

img


为什么我写的代码会多一个7和29
代码:#include
using namespace std;
int main(){
//在这里输入您的程序
int b;
for(int i=1;i<=10000;i++){
for(int j=1;j<i;j++){
if(i%j==0){
b=b+j;
}
}
if(b!=i){
b=0;
}else if(b==i){
cout<<i<<endl;
}
}
return 0;
}

给你改好了:主要是因为每次计数后只有不符合完数的才清零,像6是完数没清零就进入下一次循环了

#include <bits/stdc++.h>

using namespace std;
int main()
{
//在这里输入您的程序
    int b=0;
    for(int i=2; i<=10000; i++)
    {
        b=0;
        for(int j=1; j<=i/2; j++)
        {
            if(i%j==0)
            {
                b=b+j;
            }
        }
        if(b!=i)
        {
            b=0;
        }
        else
        {
            cout<<i<<endl;
        }
    }
    return 0;
}

img

每次循环之前现将b归零即可
因为你的b没有归零,所以6的计算结果会被带入7,导致7也被输出
修改后代码如下
有帮助望采纳

#include <iostream>
using namespace std;
int main()
{
    //在这里输入您的程序
    int b;
    for (int i = 1; i <= 10000; i++)
    {
        b = 0;
        for (int j = 1; j < i; j++)
        {
            if (i % j == 0)
            {
                b = b + j;
            }
        }
        if (b != i)
        {
            b = 0;
        }
        else if (b == i)
        {
            cout << i << endl;
        }
    }
    return 0;
}