Например:
Код: Выделить всё
9875
-> 9+8+7+5
= 29
-> 2+9
= 11
-> 1+1
= 2
Это достаточно легко сделать рекурсивно, например:
Код: Выделить всё
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);
}
Код: Выделить всё
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;
}
Код: Выделить всё
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