Удвоить цифры числа (Java)

Помечено: ,

  • В этой теме 0 ответов, 1 участник, последнее обновление 1 месяц, 1 неделя назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #6892
      @admin
      StudLance.ru

      Напишите метод с именем duplicateDigits:
      long duplicateDigits (long n)

      Исходное число n является положительным.

      Возвращаемое число построенно путем записи его цифр дважды подряд.

      Например, при вызове с аргументом 1504 этот метод будет возвращать 15041504.
      Реализовать нужно без преобразования числа n в строку, но должны вычислять ответ, используя только циклы, условия и базовую целочисленную арифметику.

      Решение

      Чтобы удвоить числа укзаанным образом нужно выполнить «сдвиг» числа влево на столько десятичных разрядов, сколько есть в числе.

      Для определения количества цифр в числе можно использовать следующий алгоритм (операция деления в этом алгоритме целочисленная, т. е. 13/10 = 1, а 655/10 = 65).

      В частности, если число равно нулю — то алгоритм сразу вернет ноль.

      Если число находится в диапазоне 0-9 — то после первой итерации цикла number равен нулю — ответ 1.

      Этот алгоритм работает, так как операция целочисленного деления на 10 «съедает» у числа младший десятичный разряд, то есть выполняет сдвиг вправо. Это значит, что любое N-значное число после N сдвигов превратится в ноль. Счетчик nDigits считает сколько сдвигов было сделано.

      После этого, необходимо сдвинуть исходное число вправо на N разрядов, чтобы из числа 12355 получить 1235500000. Для этого число нужно умножить на 10^N, сделать это можно в цикле.

      Затем останется прибавить к полученному числу исходное значение — 1235500000+12355 = 1235512355. Задача решена.
      На языке Java это может быть записано так:

      public class Main {
       public static long duplicateDigits(long number) {
        long copyNumber = number;
      
        int nDigits = 0;
      
        while (copyNumber != 0) {
         nDigits++;
         copyNumber /= 10;
        }
      
        copyNumber = number;
        for (int i = 0; i < nDigits; i++) {
         copyNumber *= 10;
        }
      
        copyNumber += number;
      
        return copyNumber;
       }
      
       public static void main(String[] args) {
        System.out.println("123: " + duplicateDigits(123));
        System.out.println("12300: " + duplicateDigits(12300));
        System.out.println("-123: " + duplicateDigits(-123));
        System.out.println("-3: " + duplicateDigits(-3));
        System.out.println("2: " + duplicateDigits(2));
        System.out.println("0: " + duplicateDigits(0));
       }
      }

      В функции main выполняется проверка корректности работы функции дублирования для различных случаев.

      Результаты:

      StudLance.ru

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
×