我已经解决了项目欧拉问题16,但发现这个相当新颖的方法,但我不能让我的周围使用(从http://www.mathblog.dk/project-euler-16/)技术头:这个C#代码如何解决答案?
int result = 0;
BigInteger number = BigInteger.Pow(2, 1000);
while (number > 0) {
result += (int) (number % 10);
number /= 10;
}
我的版本似乎更传统的,但我觉得上面的方法是冷却器。
var result = BigInteger
.Pow(2, 1000)
.ToString()
.Aggregate(0, (total, next) => total + (int) Char.GetNumericValue(next));
如何进行数学上的第一种方式工作,这是很酷,但我需要一些解释,以帮助我了解,所以如果有人会这么好心给我解释,我真的很感激。
注意:如果我在错误的部分张贴,请让我知道更好的地方问。
我花了更长的时间来了解你的技术比我花了理解另一个代码。看起来很明显或传统的东西很大程度上取决于你习惯的东西。 – CodesInChaos 2012-08-15 15:14:11
哈哈对不起 – 2012-08-15 15:15:01
为什么'.ToString()。Select(char.GetNumericValue).Aggregate()'?摆脱凌乱的拉姆达。 – 2015-01-22 18:00:40