0

次のコードをご覧ください

#include <iostream>
#include <iomanip>
#include <vector>
#include <string>

using namespace std;

void isPerfect(int);

vector<int> list;
string numList = "";


int main()
{
    cout << "Number" << setw(10) << "Divisors" << setw(15) << "Calculation";

    for(int i=1;i<=1000;i++)
    {
        isPerfect(i);
    }
}


void isPerfect(int number)
{

    int calc = 0;

    for(int i=1;i<=(number/2);i++)
    {
        if(number%i == 0)
        {
            list.push_back(i);
            //numList = numList +  string. + ",";
        }
    }

    for(size_t i=0;i<list.size();i++)
    {
        calc = list[i] + calc;
    }

    if(calc == number)
    {
        cout << number << setw(10) << numList << setw(15) << calc << endl;
    }
}

ここで、私は「完全数」を見つけようとしています(完全数-1を含む除数の合計が、それ自体ではなく、数と等しい場合、それは完全数です。例6)

しかし、ここではすべてが正しいのですが、mainメソッドで印刷したものを印刷するのではなく、結果が得られません。

なぜこうなった?とにかくこれは家事ではありません。助けてください。

4

1 に答える 1

6

リストはグローバル変数に含まれているため、以前のすべての数値の約数も含まれています。でローカルに宣言しisPerfectます。

後でわかるように、同じことが。にも当てはまりますnumList

于 2012-11-01T17:11:10.273 に答える