你们中有些人可能已经注意到,这个问题是problem 16中的Project Euler。我已经使用C#4.0的新“bigInt”功能解决了该问题,该功能相当简单,但实际上并没有学到我应该做的所有事情。我假设因为它是2 ^ 1000,所以会有某种位移的解决方案,但是我无法弄清楚它到底是如何工作的。

有人知道不使用bigint即可计算2 ^ 1000的方法吗?

最佳答案

这是仅使用数字列表(或数组)在python中执行的一种相当幼稚的方法

digits = [1]
for n in range(1000):
    newdigits = []
    carry = 0
    for digit in digits:
        s = 2*digit+carry
        carry = s/10
        s = s%10
        newdigits.append(s)
    if carry:
        newdigits.append(carry)
    digits = newdigits
print "".join(map(str,reversed(digits)))

10-06 05:24