这个C#代码如何解决问题?

Mr.*_*Mr. 2 c# math

我已经解决了项目欧拉问题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)

数学如何在第一种方法上运作,这很酷,但我需要一些解释来帮助我理解,所以如果有人能够如此友善地向我解释,我会非常感激.

注意:如果我在错误的部分发布,请告诉我更好的地方.

Jai*_*res 6

value % 10将返回最后一位数(除以10后的余数).将整数除以10将删除此数字.

将数字视为列表,您只是将列表出列并将值相加.

  • 我认为这里要提到的关键是_integer division_技术截断而不是产生小数值. (2认同)
  • 由于最高票数和作为第一个回答的人,将您的奖励作为答案. (2认同)