Вопрос:

Java программа для идеальных чисел между диапазонами

java nested-loops perfect-numbers

445 просмотра

5 ответа

2 Репутация автора

Я написал эту Java-программу для печати всех трехзначных совершенных чисел, однако она не печатает ничего, кроме «ИДЕАЛЬНЫХ НОМЕРОВ» и «Всего: 0». Массивы и функции не допускаются (школьное задание).

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);
    }
}
Автор: Shresth Sonkar Источник Размещён: 09.01.2018 07:20

Ответы (5)


1 плюс

35659 Репутация автора

Двигайтесь int sum = 0;внутри первого forцикла вместо того, чтобы объявить его снаружи.

Автор: luk2302 Размещён: 09.01.2018 07:26

2 плюса

183 Репутация автора

Вы не сбрасываете сумму на 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 Kadyrbekov Размещён: 09.01.2018 07:27

1 плюс

195483 Репутация автора

Вам нужно сбросить sumкаждую итерацию внешнего цикла. В противном случае вы будете продолжать ссылаться на факторы предыдущего числа, которое вы оценили:

for (num=100; num<=999; num++) {
    sum = 0;
    // Rest of your code
Автор: Mureinik Размещён: 09.01.2018 07:27

1 плюс

1688 Репутация автора

Вы должны сбросить сумму до 0 в каждом цикле.

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 Размещён: 09.01.2018 07:30

-1 плюса

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");
        }
    }
}
Автор: Hieu Nguyen Размещён: 24.05.2019 06:02
Вопросы из категории :
32x32