-1

I can find perfect numbers but I can't print all perfect numbers smaller than a given integer.

int main() {

    cout << "Enter a number ";
    int number{};
    cin >> number;
    int sum{};

    int j{};
    for (int i = 1; i < number ; i++) {
        j = number % i;
        if (j == 0)
            sum = sum + i;
    }
    if (sum == number){
        cout << sum;

I expect the output 6 28 496 for input=500

Remy Lebeau
  • 555,201
  • 31
  • 458
  • 770

1 Answers1

1

Seems like you've mushed your "is it perfect" logic with your "all numbers under the given limit" logic together to where you aren't getting desired results.

I'd take your test and put it in a function.

bool isPerfect(int number) {
    int j{}, sum{};
    for (int i=1; i<number; i++) {
        j = number % i;
        if (j == 0) sum = sum + i;
    }
    return (sum == number);
}

Then call that function repeatedly with all integers smaller than the given input:

int main()
{
    std::cout << "Enter a number ";
    int number{};
    std::cin >> number;
    for (int n = 1; n <= number; n++) {
        if (isPerfect(n))
            std::cout << n << " ";
    }
}

Output given limit of 30 = 6 28

Course you could still do it all in your main() function, but it's a lot clearer when you break it up.

boB
  • 173
  • 10