我已经解决了项目 Euler 问题 16,但发现了这种相当新颖的方法,但我无法理解所采用的技术(来自http://www.mathblog.dk/project-euler-16/):
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));
第一种方法的数学是如何工作的,这很酷,但我需要一些解释来帮助我理解,所以如果有人愿意向我解释,我将非常感激。
注意:如果我在错误的部分发布,请让我知道更好的提问位置。