我已经解决了项目欧拉问题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;
}
Run Code Online (Sandbox Code Playgroud)
我的版本似乎更传统,但我认为上述方法更酷.
var result = BigInteger
.Pow(2, 1000)
.ToString()
.Aggregate(0, (total, next) => total + (int) Char.GetNumericValue(next));
Run Code Online (Sandbox Code Playgroud)
数学如何在第一种方法上运作,这很酷,但我需要一些解释来帮助我理解,所以如果有人能够如此友善地向我解释,我会非常感激.
注意:如果我在错误的部分发布,请告诉我更好的地方.
value % 10
将返回最后一位数(除以10后的余数).将整数除以10将删除此数字.
将数字视为列表,您只是将列表出列并将值相加.