#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. Спасибо за прямое объяснение части с коэффициентами. =)