2的幂次方表示
描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjnOLAKd-1583034303750)(C:\Users\HUAWEI\AppData\Roaming\Typora\typora-user-images\image-20200301114236455.png)]
输入
一个正整数n(n≤20000)。
输出
一行,符合约定的n的0,2表示(在表示中不能有空格)。
样例
137
2(2(2)+2+2(0))+2(2+2(0))+2(0)
难度
中等,递归求解
解法
研究事例可知,先将输入数据137按指数从大到小分为2(7)+2(3)+2(0),然后又将指数按上面同样的方法分为2(2)+2+2(0)、2+2(0)、0,就可分出137的最终结果2(2(2)+2+2(0))+2(2+2(0))+2(0)。非常明显,这道题应该运用递归思想。
代码
def Dfs(n):
#寻找2的幂次方中最大的
maxn = 15
while(pow(2,maxn)>n):
maxn = maxn-1
y = maxn
if(y==0):
print('2(0)',end='')
if(y==1):
print('2',end='')
if(y>1):
print("2(",end='')
Dfs(y)
print(")",end='')
if(n!=pow(2,y)):
print("+",end='')
Dfs(n-pow(2,y))
n = (int)(input())
Dfs(n)