Многократно суммировать все цифры числа, пока не получите одну цифру (без рекурсии)? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Многократно суммировать все цифры числа, пока не получите одну цифру (без рекурсии)? [закрыто]

Сообщение Anonymous »

Обычная алгоритмическая задача — взять число и несколько раз суммировать его цифры, пока не получится одна цифра.
Например:

Код: Выделить всё

9875
-> 9+8+7+5
= 29
-> 2+9
= 11
-> 1+1
= 2
В моем конкретном случае задача заключается в суммировании числовой строки n, которая повторяется k раз.
Это достаточно легко сделать рекурсивно, например:

Код: Выделить всё

public static int sumAll(string n, int k)
{
if (n.Length == 1)
return int.Parse(n);

long sum = 0;
var digitArr = n.Select(c => c - 48).ToArray();

foreach (var d in digitArr)
{
if (d == 0)
continue;
sum += d * k;
}

return sumAll(sum.ToString(), 1);
}
Однако недавно я наткнулся на пример, написанный на Java, который вообще избегал рекурсии (и предположительно работал гораздо эффективнее). Автор умело использовал BigInteger и операции по модулю, т.е.

Код: Выделить всё

public static int sumAll(String n, int k) {
BigInteger num = new BigInteger(n);
int rem =  num.remainder(new BigInteger("9"))
.multiply(new BigInteger(k+"")).intValue();

return rem % 9 == 0 ? 9 : rem % 9;
}
Но мне не удалось заставить это работать при преобразовании в C#:

Код: Выделить всё

public static int sumAll(string n, int k)
{
var num = BigInteger.Parse(n);
var rem = (int)BigInteger.Remainder(num, BigInteger.Multiply(new BigInteger(9), new BigInteger(k)));
return rem % 9 == 0 ? 9 : rem % 9;
}
Я что-то упустил?

Или человек, который поделился примером Java, просто ошибался, полагая, что эту проблему можно эффективно решить без рекурсии?

Подробнее здесь: https://stackoverflow.com/questions/791 ... git-withou
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»