Рекурсивный метод, который находит разницу между количеством цифр в 2 заданных целых числах

Входные данные — два заданных целых числа, оба из которых являются N числами, выход должен быть результатом разницы. Например, для первого числа, равного 1234, и второго, равного 1, вывод должен быть 3. Я попытался написать рекурсивный метод, но он не позволил мне вычесть их, говоря, что требуется два целых числа, но я нашел один. Вот код на данный момент:

public static int digitDiffer (int a, int b){
   int sumA = 0;
   int sumB = 0;
   if (a == 0 && b==0){
     return 0;
   }
   else {
     sumA += a % 10;
     a /= 10;
     sumB += b % 10;
     b /= 10;
   }
   return digitDiffer (sumA-sumB);
 }

ваши аргументы sumA-sumB. Изменить на sumA, sumB

moh ro 11.12.2020 15:27

@moh ro, но это не вернет разницу, не так ли?

Ohande 11.12.2020 15:28

Почему выход должен быть 3?

BUG 11.12.2020 15:34

Почему результат 3? Это потому, что 1234 — это четыре цифры, а 1 — одна цифра, таким образом, 4 — 1 -> 3?

Kevin Anderson 11.12.2020 15:34

@КевинАндерсон Да.

Ohande 11.12.2020 15:40

@BUG извините за двойной пост, но причина в комментарии Кевина. извините, если я был неясен об этом

Ohande 11.12.2020 15:42

Не вижу необходимости в вашем рекурсивном вызове. sumA-sumB - ваш ответ. Почему ты снова звонишь в digitDiffer? Он ожидает 2 аргумента, а вы передаете только один. Это то, на что компилятор жалуется.

moh ro 11.12.2020 15:42

@moh ro Я бы не использовал рекурсию, если бы мне это не требовалось, я согласен, что на самом деле в этом нет необходимости.

Ohande 11.12.2020 15:45

Если вам нужно использовать рекурсию (даже без необходимости) для чего-то, это что-то должно быть рекурсивной подпрограммой, которая подсчитывает цифры int. После этого все решение просто Math.abs(countDigits(A)-countDigits(B)).

Kevin Anderson 11.12.2020 15:58

Ваш код не может быть скомпилирован в его текущем состоянии, у вас есть метод, требующий двух параметров, и вы передаете ему только один параметр, который является суммой (sumA-sumB).

MrBorder 11.12.2020 15:59

@MrBorder Есть ли способ вернуть разницу, чтобы вывод был «3» в текущем состоянии? Это то, что меня попросили сделать.

Ohande 11.12.2020 16:01

Код, который у вас уже есть, делает что-то почти совсем не похожее на задачу, которую вам нужно выполнить; это все равно, что думать, что вы можете превратить велосипед в BMW только потому, что оба являются колесными транспортными средствами (;->).

Kevin Anderson 11.12.2020 16:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
12
486
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

это мой подход

public static int digitDiffer (int a, int b){
        // I will divide a and b by 10 until one of them is 0
        if (a != 0 && b != 0) return digitDiffer(a/10, b/10);

        //if b == 0 and a != 0 then I will count how many times I can divide a by 10 until it becomes 0
        if (a != 0 && b == 0) return 1 + digitDiffer(a/10, 0);

        // if a == 0 and b != 0 then I will count how many times I can divide b by 10 until it becomes 0
        if (a == 0 && b != 0) return 1 + digitDiffer(0, b/10);
        return 0;
    }

Пример вывода: для a = 12345 и b=1 вывод будет: 4

Это прекрасно, можете ли вы объяснить, как вы настроили вывод так, чтобы он возвращал одно целое число, тогда как в моем коде это не позволяло мне?

Ohande 11.12.2020 16:09

@Ohande, ваша функция выше принимает два аргумента, а вы указали только один аргумент. В любом случае, я рекомендую вам потратить некоторое время на тему рекурсии, чтобы лучше понять, как она работает.

BUG 11.12.2020 16:26

Другие вопросы по теме