3

我想递归地迭代一个日期的数字,对它们求和,然后计算第一个总和中各个数字的另一个总和。

例如,出生日期 1947 年 8 月 15 日 (15/08/1947)

1+5+0+8+1+9+4+7 = 35

3+5 = 8

答案:8

LINQ 的.Aggregate()功能对我帮助很大...

DOB.toString().Aggregate((a,b)=>(int)a+(int)b)

...但结果为35 :(

我想要一个递归 LINQ 调用,结果总是一位数。

4

2 回答 2

6
string result = DOB.ToString("ddMMyyyy");

while (result.Length > 1)
    result = result.Sum(c => int.Parse(c.ToString()))
                   .ToString();
于 2013-09-12T10:42:44.813 回答
2

DOB.ToString("yyyymmdd") 正好返回 8 位数字。每个数字不超过 9,所以第一个总和永远不会超过 8*9=72。所以只需要一个另一个总和。最后一个单一的linq答案是:

sum =
       dob.ToString("yyymmdd")
          .Aggregate(0, (a, b) => a + int.Parse(b.ToString())).ToString()
          .Aggregate(0, (a, b) => a + int.Parse(b.ToString())).ToString()
          .Aggregate(0, (a, b) => p + int.Parse(b.ToString()));
于 2013-09-12T10:47:09.563 回答