正如你们中的一些人可能会注意到这个问题是来自Project Euler的问题16.我已经使用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)))
Run Code Online (Sandbox Code Playgroud)