资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab 可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7= 22+2+20 (21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=210 +28 +25 +2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入格式
输入包含一个正整数N(N<=20000),为要求分解的整数。
输出格式
程序输出包含一行字符串,为符合约定的n的0,2表示(在表示中不能有空格)
解题思路:
先将十进制数转化为二进制数,通过enumerate()
方法遍历所有二进制位,并在过程中使用递归将次方分解为只有2
和2(0)
的和的形式。
n = eval(input())
def solution(n):
stack = []
while n != 1: # 将10进制转化为2进制并用列表存储
temp = n & 1
stack.append(temp)
n = n // 2
stack.append(1)
output = ''
lst = [] # 用于存储
for ind,item in enumerate(stack):
if item == 0:
continue
else:
if ind ==0:
output ='2(0)'
elif ind == 1:
if not output:
output = '2'
else:
output = '2+'+output
else: # 调用递归
if not output:
output = '2({})'.format(solution(ind))
else:
output = '2('+solution(ind)+')+'+output
return output
print(solution(n))