Я пытаюсь построить программу с сильными числами, но не получаю ожидаемого результата - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь запрограммировать, что независимо от того, введено пользователем не строгое число или нет, но я получаю одинаковый вывод 145 = 1! + 4! + 5! = 145 - сильное число
123 = 1! + 2! + 3! = 9 не является сильным числом

     import java.util.*;
     public class Strong{
        public static void main(String[] args)
        {
            Scanner s=new Scanner(System.in);
            int n=s.nextInt();
            int i;
            int fact=1;
            int rem;
            int sum=0;
            int temp=n;
            while(n!=0) {
               rem=n%10;
               for(i=1;i<=rem;i++) {
                  fact=fact*i;
               }
               sum=sum+fact;
               n=n/10;
            }

            if(sum==temp) {
                System.out.println("number u have entered is strong");
            } else {
                System.out.println("no is not strong");
            }
        }
     }

Например, я ввел no 145, я ожидаю, что введенный вами номер выхода является сильным, но фактический вывод no не является сильным

Ответы [ 3 ]

2 голосов
/ 04 июля 2019

Вы не сбрасываете переменную fact между while циклами.

Просто добавьте fact = 1; в начале цикла или переместите объявление переменной int fact = 1; внутри цикла, чтобы оно существовало только внутри его области.

Кроме того, это может быть неважно для вас на этом этапе, но я бы посоветовал вам использовать эту возможность, чтобы научиться использовать отладчик; это будет большая помощь позже.

0 голосов
/ 05 июля 2019

Это должно быть примерно так:

    public static void main(String[] args)
    {
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        int temp=n;
        int sum = getStrongNumberSum(n);

        if(sum==temp) {
            System.out.println("number u have entered is strong");
        } else {
            System.out.println("no is not strong");
        }
    }

    private static int getStrongNumberSum(int n) {
        int sum = 0;
        while (n != 0) {
            int fact = 1; // main change !!!
            int rem = n % 10;
            for (int i = 1; i <= rem; i++) {
                fact = fact * i;
            }
            sum = sum + fact;
            n = n / 10;
        }
        return sum;
    }
0 голосов
/ 04 июля 2019

Перемещение int fact = 1; внутри цикла. это не сбрасывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...