AgNO3


私信TA

用户名:AgNO3

访问量:609

签 名:

等  级
排  名 21056
经  验 630
参赛次数 0
文章发表 1
年  龄 20
在职情况 学生
学  校 信息工程大学
专  业

  自我简介:

解题思路:
用二进制对应位数是否为 1 ,来判断分解成2的次幂的情况

>>> bin(1315)
'0b10100100011'

二进制第1,2,6,9,11位是1,对应分解后就是

1315 = 2^10 + 2^8 + 2^5 + 2^1 + 2^0


运用递归,对每个>幂次<调用函数自身

基础情况:

func(1) = 2(0)
func(2) = 2             #注意不是2(1)


自己写的,有很长的调试过程,主要是懒得想 循环位置到底应不应该-1,或者是+1之类的简单的逻辑问题

其实找个简单的数据带进去试试就行了

注意事项:
分解的次幂是从大到小排列的
参考代码:

def tbin(num):
    b = []
    while num != 0:
        b += [num%2]
        num //= 2
    return b                          #转为二进制
def mfj(b):
    bi,t = tbin(b),''                 #t为输出的结果,初始为空字符串''
    for i in range(1,len(bi)+1):
        if bi[len(bi)-i]:
            if len(bi)-i == 0:        #处理特殊情况
                t += '2(0)+'
            elif len(bi)-i == 1:      #处理特殊情况
                t += '2+'
            else:
                t += '2('+mfj(len(bi)-i)+')+'    #递归
    return t[0:-1]    #t在末尾会多出一个'+'
a = int(input().strip())
print(mfj(a))


 

0.0分

5 人评分

  评论区

楼主好棒哦
2020-07-19 20:21:06
  • «
  • 1
  • »