你们中有些人可能已经注意到,这个问题是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)))