洛谷 P1010 [NOIP1998 普及组] 幂次方 Python题解

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)))

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值