Problem2056--幂次方hint

2056: 幂次方hint

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MB

Description

任何一个正整数都可以用2的幂次方表示。例如 137=27+23+20

同时约定方次用括号来表示,即 ab可表示为a(b)。

由此可知,137可表示为 2(7)+2(3)+2(0)

进一步:

7= 22+2+20(212表示,并且3=2+20

所以最后 137可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。

Input

一个正整数n,1≤n≤2×104

Output

符合约定的n的0, 2表示(在表示中不能有空格)。

Sample Input Copy

1315

Sample Output Copy

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

HINT

NOIP1998普及组

n=int(input())
def f(n,i,s):
    if n==0: return s
    if n&1==0: return f(n>>1,i+1,s)
    if n&1:
        if s!="": s="+" + s
        if i==0: return f(n>>1,i+1, "2(0)" + s)
        if i==1: return f(n>>1,i+1, "2" + s)
        return f(n>>1,i+1, "2(" + f(i,0,"") + ")" + s)
print( f(n,0,"") )



Source/Category

递归