[Python] 2的N次方
[Python] 2的N次方
题目描述
对于一个整数N(512 <= N <= 1024),计算2的N次方并在屏幕显示十进制结果。
输入描述
输入一个整数N(512 <= N <= 1024)
输出描述
2的N次方的十进制结果
示例
输入
512
输出
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
链接
链接: link.
思路1
python的暴力解法…直接进行N次方计算
print 2**int(raw_input())
思路2
模拟乘法计算。以下代码仅供思路上的参考。因为,当N很大的时候,程序无法运行…
希望有大神指出应该如何优化 o(╥﹏╥)o
n = int(raw_input())
a = [int(0) for i in range(2**n)]
lon = len(a)
a[-1] = 1
flag = 0
k = 0
ans = []while n>0:for i in range(lon-1,-1,-1):t = a[i] * 2 + flag # 保存结果a[i] = t % 10 # 对数值进行更新,满十进一flag = t / 10 # 进位标志n -= 1
for j in range(lon):if a[j] != 0:k = jbreak
for ii in range(k,lon):ans.append(a[ii])anss = int(''.join(map(str,ans)))
print anss
以上代码存在一个问题,N的数值太大会报‘OverflowError’ ,所以只适用于N比较小的情况下(N为20的时候,程序的运行时间就达到了5s以上…)
o(╥﹏╥)o
OverflowError: range() result has too many items
[Python] 2的N次方
[Python] 2的N次方
题目描述
对于一个整数N(512 <= N <= 1024),计算2的N次方并在屏幕显示十进制结果。
输入描述
输入一个整数N(512 <= N <= 1024)
输出描述
2的N次方的十进制结果
示例
输入
512
输出
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
链接
链接: link.
思路1
python的暴力解法…直接进行N次方计算
print 2**int(raw_input())
思路2
模拟乘法计算。以下代码仅供思路上的参考。因为,当N很大的时候,程序无法运行…
希望有大神指出应该如何优化 o(╥﹏╥)o
n = int(raw_input())
a = [int(0) for i in range(2**n)]
lon = len(a)
a[-1] = 1
flag = 0
k = 0
ans = []while n>0:for i in range(lon-1,-1,-1):t = a[i] * 2 + flag # 保存结果a[i] = t % 10 # 对数值进行更新,满十进一flag = t / 10 # 进位标志n -= 1
for j in range(lon):if a[j] != 0:k = jbreak
for ii in range(k,lon):ans.append(a[ii])anss = int(''.join(map(str,ans)))
print anss
以上代码存在一个问题,N的数值太大会报‘OverflowError’ ,所以只适用于N比较小的情况下(N为20的时候,程序的运行时间就达到了5s以上…)
o(╥﹏╥)o
OverflowError: range() result has too many items