Как вывести цифры числа на экран

613
17 февраля 2017, 01:51

Нужно создать программу, которая выводит через пробел цифры числа, введенного с клавиатуры. Например, для 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 + " ");
}

Как вывести цифры в прямом порядке с учетом заданных ограничений?

Answer 1

Вариант с предварительным подсчетом количества цифр. Подсчет количества здесь условный, потому что по факту высчитывается с какого делителя (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).

Answer 2

Вариант с использованием метода 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 
READ ALSO
Вёрстка нескольких блоков

Вёрстка нескольких блоков

Доброго времени сутокПытаюсь реализовать следующее (см

395
Оформление кода css

Оформление кода css

Собственно вопрос, посоветуйте готовое решение для оформления примеров кода, например как тут или хабре, вот так:

346
сброс сесси на tomcat

сброс сесси на tomcat

Разворачиваю приложение на TomcatПытаюсь добиться, чтобы со временем сессия не сбрасывалась

432