Входные данные — два заданных целых числа, оба из которых являются 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);
}
@moh ro, но это не вернет разницу, не так ли?
Почему выход должен быть 3?
Почему результат 3? Это потому, что 1234 — это четыре цифры, а 1 — одна цифра, таким образом, 4 — 1 -> 3?
@КевинАндерсон Да.
@BUG извините за двойной пост, но причина в комментарии Кевина. извините, если я был неясен об этом
Не вижу необходимости в вашем рекурсивном вызове. sumA-sumB - ваш ответ. Почему ты снова звонишь в digitDiffer? Он ожидает 2 аргумента, а вы передаете только один. Это то, на что компилятор жалуется.
@moh ro Я бы не использовал рекурсию, если бы мне это не требовалось, я согласен, что на самом деле в этом нет необходимости.
Если вам нужно использовать рекурсию (даже без необходимости) для чего-то, это что-то должно быть рекурсивной подпрограммой, которая подсчитывает цифры int
. После этого все решение просто Math.abs(countDigits(A)-countDigits(B))
.
Ваш код не может быть скомпилирован в его текущем состоянии, у вас есть метод, требующий двух параметров, и вы передаете ему только один параметр, который является суммой (sumA-sumB).
@MrBorder Есть ли способ вернуть разницу, чтобы вывод был «3» в текущем состоянии? Это то, что меня попросили сделать.
Код, который у вас уже есть, делает что-то почти совсем не похожее на задачу, которую вам нужно выполнить; это все равно, что думать, что вы можете превратить велосипед в BMW только потому, что оба являются колесными транспортными средствами (;->).
это мой подход
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, ваша функция выше принимает два аргумента, а вы указали только один аргумент. В любом случае, я рекомендую вам потратить некоторое время на тему рекурсии, чтобы лучше понять, как она работает.
ваши аргументы
sumA-sumB
. Изменить наsumA, sumB