Нужно создать программу, которая выводит через пробел цифры числа, введенного с клавиатуры. Например, для 4561
нужно вывести 4 5 6 1
.
При этом разрешается использовать while
, for
, do while
и арифметические действия. Не разрешается использовать строковые операции (например, toString
).
В обратном порядке получилось сделать при помощи этого алгоритма:
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = 0;
int c;
while (a != 0) {
c = a % 10;
b = b * 10 + c;
a = a / 10;
System.out.print(b % 10 + " ");
}
Как вывести цифры в прямом порядке с учетом заданных ограничений?
Вариант с предварительным подсчетом количества цифр. Подсчет количества здесь условный, потому что по факту высчитывается с какого делителя (divider
) начинать делить число.
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int divider = 1;
while (divider <= a)
{
divider *= 10;
}
divider /= 10;
while (divider > 0)
{
int digit = a / divider;
a -= digit * divider;
System.out.print(digit + " ");
divider /= 10;
}
Этот вариант работает только с положительными числами.
Вариант без предварительного подсчета количества пользователя и с перебором всех вариантов делителя:
Scanner s = new Scanner(System.in);
int a = s.nextInt();
boolean gotFirstDigit = false;
for (int divider = 1000 * 1000 * 1000; divider > 0; divider /= 10)
{
int digit = a / divider;
if (!gotFirstDigit)
{
gotFirstDigit = (digit != 0);
}
if (gotFirstDigit)
{
a -= digit * divider;
System.out.print(digit + " ");
}
}
Этот вариант также работает только с положительными числами.
Оба варианта используют один и тот же способ для получения цифр: целая часть от деления числа на заданный делитель.
Для обработки нуля и отрицательных чисел можно добавить такой код:
int a = s.nextInt();
if (a == 0)
{
System.out.print(0);
return;
}
if (a < 0)
{
System.out.print("- ");
a *= -1;
}
Единственное ограничение: данный код не будет работать для Integer.MIN_VALUE
(-2147483648
).
Вариант с использованием метода toCharArray():
public static void main(String[] args) {
Scanner number = new Scanner (System.in); // вводим число в консоли
char [] numeral = number.nextLine().toCharArray(); // из введенного числа создаем массив символов
for (char x:numeral)
System.out.print(x + " "); // каждый элемент массива выводим в консоль через пробел
// развернуто:
Scanner num1 = new Scanner (System.in);
System.out.println("\nEnter number:");
String number1 = num1.nextLine();
char [] numeral1 = number1.toCharArray();
for (int x = 0; x < numeral1.length; x++)
System.out.print(numeral1 [x] + " ");
num1.close();
}
Console:
4485455
4 4 8 5 4 5 5
Enter number:
548452
5 4 8 4 5 2
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Собственно вопрос, посоветуйте готовое решение для оформления примеров кода, например как тут или хабре, вот так:
Разворачиваю приложение на TomcatПытаюсь добиться, чтобы со временем сессия не сбрасывалась
вопрос в заголовке)