-4

I wrote this java program for printing all three digit perfect numbers, however it doesn't print anything except "PERFECT NUMBERS" and "Total : 0". Arrays and functions not allowed (school assignment).

class PerFect
{
    public static void main(String args[])
    {
        int num, i, sum=0, total=0;
        System.out.println("PERFECT NUMBERS : ");
        for(num=100; num<=999; num++)  
        {
            for(i=1; i<=num; i++)
            {
                if(num%i==0)
                    sum=sum+i;
            }
            if(num*2==sum)
            {
                System.out.println(num);
                sum=0;
                total++;
            }
       }
       System.out.println("Total : "+total);
    }
}
Mureinik
  • 297,002
  • 52
  • 306
  • 350

6 Answers6

2

You are not resetting sum to 0.

public static void main(String args[])
    {
        int num, i, sum=0, total=0;
        System.out.println("PERFECT NUMBERS : ");
        for(num=100; num<=999; num++)  
        {
          sum=0;
            for(i=1; i<=num; i++)
            {
                if(num%i==0)
                    sum=sum+i;
            }

         //System.out.println("Sum : "+sum + " " + num);
            if(num*2==sum)
            {
                System.out.println(num);
                sum=0;
                total++;
            }
       }
       System.out.println("Total : "+total);
    }
omurbek
  • 742
  • 1
  • 7
  • 23
1

Move int sum = 0; inside the first for loop instead of declaring it outside.

luk2302
  • 55,258
  • 23
  • 97
  • 137
1

You need to reset your sum each iteration of the outer loop. Otherwise, you'd be be continuing to reference the factors of the previous number you've evaluated:

for (num=100; num<=999; num++) {
    sum = 0;
    // Rest of your code
Mureinik
  • 297,002
  • 52
  • 306
  • 350
1

You should reset sum to 0 every loop.

int num, i, sum, total=0;
System.out.println("PERFECT NUMBERS : ");
for (num = 100; num <= 999; num++) {
    sum = 0; // you should reset sum every loop.
    for (i = 1; i <= num; i++) {
        if (num % i == 0) {
            sum = sum + i;
        }
        if (num * 2 == sum) {
            System.out.println(num);
            total++;
        }
    }
}
System.out.println("Total : " + total);
zhh
  • 2,346
  • 1
  • 11
  • 22
0
import java.util.*;



public class perfect1 
{
    int num, sum;

    perfect1() {
        num = sum = 0;
    }

    void accept() {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the upper range");
        num = sc.nextInt();
        if (num < 0) {
            System.out.println("INVALID CHOICE");
            System.exit(0);
        }
    }

    int i = 1;

    int factorsum(int a) {
        if (i == a) {
            return sum;
        } else {
            if (a % i == 0)
                sum = sum + i;
            i = i + 1;
            return factorsum(a);
        }
    }

    void display() {
        for (int j = 1; j <= num; j++) {
            sum = 0;
            i = 1;
            factorsum(j);
            if (sum == j)
                System.out.println(j);
        }
    }

    public static void main(String args[]) {
        perfect1 obj = new perfect1();
        obj.accept();
        obj.display();
    }

}
Sachith Muhandiram
  • 2,819
  • 10
  • 45
  • 94
-1
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg6.pkg24;

/**
 *
 * @author HieuNguyen
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        for (int num = 1; num <= 1000; num++) {
            isItPerfectNumber(num);
        }
    }

    public static void isItPerfectNumber(int num) {
        int factor = 1;
        String factors = "Factors: ";
        int total = 0;
        while (factor < num) {
            if (num % factor == 0) {
                total += factor;
                factors += factor + " ";
            }
            factor++;
        }
        if (total == num) {
            System.out.printf("%s is perfect number\n", num);
            System.out.print(factors + "\n");
        }
    }
}
vimuth
  • 5,064
  • 33
  • 79
  • 116