P1010 [NOIP1998 普及组] 幂次方
时间:2023.10.11
题目地址:幂次方
题目分析
了解递推思路,就能很好的理解了,直接看代码。
代码
import math as mt
def divide(n):
flag = False # 判断是否输出‘+’
while n != 0:
i = int(mt.log2(n)) # 获取当前最大的幂次,如:log2(137) = 7.xxx, int()直接得到了7
if flag: # 判断是否是第一个元素
print('+', end='')
if i == 1: # 如果为n=2**1则不需要递归了直接输出
print('2', end='')
elif i == 0: # 如果n=1则不需要递归了直接输出
print('2(0)', end='')
else: # 随后按照要求输出递归就行了
print('2(', end='')
divide(i)
print(')', end='')
n -= 2**i # 更新n值
flag = True
n = int(input())
divide(n)