def f1(x):
# 获取一个数的幂 137 list = [7 3 0]
str1 = bin(x)[2:][::-1]
list1 = []
for i in range(len(str1)-1,-1,-1):
if str1[i] == '1':
list1.append(i)
return list1
def f2(list):
# 格式化输出
list1 = [str(i) for i in list]
str2 = ''
for i in range(len(list1)): # 7 3 0
if i < len(list1) - 1:
if list1[i] == "1":
str2 += "2+"
else:
if list[i] != 0:
str2 += "2({})+".format(f2(f1(list[i]))) # 递归开始 7 == 2 1 0
else:
str2 += "2(0)"
if i == len(list1) - 1: # 最后一位不加+号
if list1[i] == "1":
str2 += "2"
else:
if list[i] != 0:
str2 += "2({})".format(f2(f1(list[i])))
else:
str2 += "2(0)"
return str2
"""
对于 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
其实是 2(部分1)+2(部分2)+2(部分3)+2+2(0) 注意部分里面的求法和求全部的是一样的 这样的话就可以递归了
主要思想就是将大于1的数 全部转换为0 1 0 1 的数
"""
n = int(input())
print(f2(f1(n)))
洛谷 P1010 [NOIP1998 普及组] 幂次方 Python题解
最新推荐文章于 2024-08-10 20:39:29 发布