首页 > 试题广场 >

2的幂次方

[编程题]2的幂次方
  • 热度指数:7972 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0。     Let's present a^b by the form a(b).Then 137 is presented by 2(7)+2(3)+2(0). Since 7 = 2^2 + 2 + 2^0 and 3 = 2 + 2^0 , 137 is finally presented by 2(2(2)+2 +2(0))+2(2+2(0))+2(0).        Given a positive number n,your task is to present n with the exponential form which only contains the digits 0 and 2.

输入描述:
    For each case, the input file contains a positive integer n (n<=20000).


输出描述:
    For each case, you should output the exponential form of n an a single line.Note that,there should not be any additional white spaces in the line.
示例1

输入

1315

输出

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

简单易懂,最简洁实现。一个转换函数,递归实现

def convenBin(num):
    numBin = bin(num).replace('0b','')        #转换成2进制
    numPower = len(numBin)-1                  #对应长度的2进制次幂
    result = []                           
    while numBin:
        if numBin[0] == '1':                  #如果该二进制位为1我们才加入结果
            if numPower >= 2:                 #次幂大于等于2我们要递归它
                result.append('2(%s)'% convenBin(numPower))
            elif numPower == 1:               #1和0不能通用解决,就单独列出来
                result.append('2')
            else:
                result.append('2(0)')
        numPower -= 1
        numBin = numBin[1:]
    return '+'.join(result)                   #返回用+相接的结果
while True:
    try:
        print(convenBin(int(input)))
    except Exception:
        break
编辑于 2018-10-14 10:19:46 回复(0)

问题信息

难度:
1条回答 8578浏览

热门推荐

通过挑战的用户

查看代码