如何递归迭代日期的数字和总和?

时间:2013-09-12 10:32:12

标签: c# linq

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

例如, DOB 1947年8月15日(19/08年8月15日)

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调用,结果总是一位数。

2 个答案:

答案 0 :(得分:6)

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

while (result.Length > 1)
    result = result.Sum(c => int.Parse(c.ToString()))
                   .ToString();

答案 1 :(得分: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()));