2013-06-13 96 views
-4

我有一个数字作为N = 2345递归求和找到单个数字

如果我总结他们的结果将是2 + 3 + 4 + 5 = 14;

如果我进一步总结它们将是1 + 4 = 5;这是一个单一的数字;

找到这个的有效方法是什么?

我下面的答案(Is there any better way to find the digit multiplication and summation?),并写了一个recusive功能可按但不工作

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

这是数量,这只是将是N%9或9,如果N%的digital root 9是0:

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

那么不需要递归?取而代之的

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

+0

+1,很棒的链接:) –

3
int a = 123456; 
int result = a; 

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

@大卫:'10'不是单个数字 –

+0

是的。我会删除我的评论。 – David

+0

但我需要找出步骤......也就是在第一遍中它是1 + 2 + 3 + 4 + 5 + 6 = 21。在第二遍中它是2 + 1 = 3 ..所以有两次传球 –

1

尝试

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