2013-06-13 3 views
-4

У меня есть номер как N = 2345Рекурсивный сумма, чтобы найти одну цифру

Если я суммировать их результат будет 2 + 3 + 4 + 5 = 14;

Если я еще их суммирую, это будет 1 + 4 = 5; которая представляет собой одну цифру;

Что такое эффективный способ найти это?

Я после ответа (Is there any better way to find the digit multiplication and summation?) и написал возвратных степенных Funciton, но не работает

public static int FindSingleDigit(int N) 
{ 
     var sum = 0; 
     while (N != 0) 
     { 
      sum = sum + (N % 10); 
      N = N/10; 
     } 
     if (sum >= 10) FindSingleDigit(sum); 
     return sum; 
} 
+6

не сильно отличается от вашего предыдущего вопроса [] (http://stackoverflow.com/questions/17080289/is-there-any -Лучш-путь к найти-значное-умножение-и-суммирование). Почему два вопроса? –

ответ

6

Это digital root числа, который только собирается быть N% 9 или 9, если N% 9 является 0:

int digitalRoot = 1 + (N-1)%9; 

Так что нет необходимости в рекурсии?

+0

+1, отличная ссылка :) –

3
int a = 123456; 
int result = a; 

while (result >= 10) 
    result = result.ToString() 
        .Sum(x => int.Parse(x.ToString())); 
+1

@David: '10' не одна цифра –

+0

yep. Я удалю свой комментарий. – David

+0

, но мне нужно выяснить шаги также .. как в проходе 1 это 1 + 2 + 3 + 4 + 5 + 6 = 21. во втором проходе это 2 + 1 = 3 .. так что есть два прохода –

1

Вместо

if (sum >= 10) FindSingleDigit(sum); 
    return sum; 

попробовать

if (sum >= 10) 
    return FindSingleDigit(sum); 
else 
    return sum;