Умножение цифр номера, пока вы не наберете одну цифру git - PullRequest
1 голос
/ 07 марта 2020

Предположим, вы вводите число 546, затем вы должны найти произведение его цифр, которое составляет 5 * 4 * 6 = 120, затем умножить цифры на 120 до тех пор, и так далее, продолжайте, пока не получите один ди git номер. Вот код, который я написал, но l oop не работает правильно, и я пытался это исправить, но ничего не изменилось. Не могли бы вы помочь мне?

import java.util.*;
public class Product {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int a = keyboard.nextInt();
        System.out.println("Please input the number");
        numberOfProducts(a);


    }
    public static void numberOfProducts(int n){
        int product = 1;
        while(n>10) {
            int current = n;
            while (current != 0) {
                product = product * (current % 10);
                current = current / 10;
                n = product;
                System.out.println(product);
            }
        }

    }

}

Ответы [ 4 ]

2 голосов
/ 07 марта 2020

Я думаю, что вы смотрите что-то вроде кода ниже:

import java.util.Scanner;

public class Main {
    public static int numberOfProducts(String number) {
        int product = 1;
        do {
            for (int i = 0; i < number.length(); ++i){
                // This line converts the every digit of the number string to an integer.
                product *= number.charAt(i) - '0';
            }
            // Remove this line, if you don't want to print the product of each iteration.
            System.out.println(number);
            // Update number with the new product.
            // This line converts the int product to a new string.
            number = "" + product;
        } while (product > 10);
        return product;
    }
    public static void main(String[] args) {
        System.out.print("Please input the number: ");
        Scanner keyboard = new Scanner(System.in);
        int a = keyboard.nextInt();
        // Treat number as a string for easier indexing.
        String number = "" + a;
        System.out.println(numberOfProducts(number));
    }
}

Когда работает приведенный выше код с 546 в качестве ввода, он выводит:

Please input the number: 546
546
120
0
1 голос
/ 07 марта 2020

Для другого подхода к решению вы можете использовать recursive lambda

import java.util.Scanner;
import java.util.function.IntFunction;

public class Product {
    // this simply reduces the number to the product of its digits.
    static IntFunction<Integer> prod =
            (a) -> a < 10 ? a : a % 10 * Product.prod.apply(a / 10);

    public static void main(String[] args) {

        Scanner keyboard = new Scanner(System.in);
        System.out.print("Please input the number");
        int n = keyboard.nextInt();

        // Now continue applying the lambda until the result is < 10.
        while (n > 10) {
            n = prod.apply(n);
        }
        System.out.println(n);
    }
}
1 голос
/ 07 марта 2020

После просмотра кода ваша проблема выглядит следующим образом: current % 10. Операция по модулю дает остаток от деления на десять. В случае ввода 120, результатом этой операции будет 0.

После остальных логи вашего приложения c ваша итерационная переменная будет установлена ​​в ноль, немедленно заканчивая ваш l oop .

Я не дам вам код копирования-вставки, чтобы решить эту проблему, так как это похоже на назначение курса программирования. Однако я помогу вам решить ее.

Мое предлагаемое исправление состоит в том, чтобы изменить ваш подход к этой проблеме и не пытаться решить ее математическим путем, а скорее так, чтобы использовать преимущества языка программирования Java , Вы можете изменить свой ввод с Integer на String. В этом случае вы можете использовать String.length (), чтобы обеспечить выполнение вашего требования при выходе из l oop. В вашем l oop вы разбиваете строку на подстроки длины 1. Затем вы просто умножаете их.

Когда выйдет l oop (поскольку длина строки не больше 1), вы будете получить желаемый результат.

Удачи!

0 голосов
/ 07 марта 2020
import java.util.*;
public class Product {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int a = keyboard.nextInt();
        System.out.println("Please input the number");
        numberOfProducts(a);


    }
      public static void numberOfProducts(int n){
        int product = 1; 

        while (n != 0)   { 
        product = product * (n % 10); 
        n = n / 10; 
        } 

        if(product > 10) {
            System.out.println("Intermediate result="+product);
            numberOfProducts(product);
        }
        else
            System.out.println("Final 1 digit product="+product);

    }

}
...