Алгоритм Java разбиения числа на цифры

#java

#java

Вопрос:

 package test;
import java.util.Scanner;

public class SplitNumber
{
    public static void main(String[] args)
    {
        int num, temp, factor = 1;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a number: ");
        num = sc.nextInt();
        temp = num;
        while (temp != 0) {
            temp = temp / 10;
            factor = factor * 10;
        }
        System.out.print("Each digits of given number are: ");
        while (factor > 1) {
            factor = factor / 10;
            System.out.print((num / factor)   " ");
            num = num % factor;
        }
    }
}
  

Я не могу понять работу этого int factor. Может ли кто-нибудь помочь мне понять этот алгоритм codes?

Комментарии:

1. Что должен делать этот код?

2. Вы пробовали использовать отладчик? Это должно дать вам представление.

3. Integer.toString(12345).replaceAll("(\d)", "$1 ").trim()

Ответ №1:

В языках программирования, если вы сохраняете двойное значение в int, оно округляет число до меньшего, таким образом, если вы сделаете 15/10, оно вернет 1 как int, а если вы сделаете 5/10, оно вернет 0. Благодаря этим знаниям вы сможете понять.

Например, пусть число равно 953,

 while (temp != 0) {
    temp = temp / 10;
    factor = factor * 10;
}
  

1.Время итерации = 95, коэффициент = 10

2.Время итерации = 9, коэффициент = 100

3.Время итерации = 0, коэффициент = 1000

завершение цикла while, поскольку temp равно 0.

 while (factor > 1) {
    factor = factor / 10;
    System.out.print((num / factor)   " ");
    num = num % factor;
}
  

1.Число итераций = 953, коэффициент = 100, 953/100 = 9 (вы получаете первую цифру)

2.Число итераций = 953% 100 = 53, коэффициент = 10, 53/10 = 5 (вы получаете вторую цифру)

3.Число итераций = 53% 10 = 3, коэффициент = 1, 3/1 = 3 (вы получаете последнюю цифру)

Завершение цикла while.

На самом деле это элементарная математика. Когда вы хотите извлечь n-ю цифру числа, вам просто нужно разделить ее на 10 ^ n.

Ответ №2:

Оператор модуля для извлечения самой правой цифры или разрядов из числа. Например, x % 10 выдает крайнюю правую цифру x (в базе 10). Аналогично x % 100 выдает последние две цифры.

Здесь больше информации

Ответ №3:

Если вас не волнует изменение порядка цифр, вы могли бы просто написать

 int num = sc.nextInt();
do {
  System.out.println(num % 10);
  num = num / 10;
} while(num != 0);
  

Операция по модулю num % 10 вычисляет остаток от деления num на 10 , эффективно получая цифру в самой низкой позиции («единицы»). 0 % 10 есть 0 9 % 10 есть 9 , 10 % 10 снова есть 0 и так далее. Затем деление на 10 превращает старые «десятки» в новые «единицы», и все это повторяется до тех пор, пока 0 не останется.

Проблема в вашем коде заключается в том, чтобы выводить цифры в «правильном» порядке, сначала самая высокая позиция, потом последняя. Таким образом, он сначала проверяет, сколько цифр в вашем номере, factor увеличивается до того же размера в процессе. temp=temp/10; выполняет ту же роль, что и num=num/10; в коротком фрагменте (вырезает цифру из числа на каждой итерации), и factor=factor*10 одновременно «добавляет» цифру к factor . [Я просто останавливаюсь здесь, поскольку уже есть принятый ответ, объясняющий это]

Комментарии:

1. Спасибо за прямое объяснение части с коэффициентами. =)