描述
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=22+2+20(21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=210+28+25+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入
一个正整数n(n≤20000)。输出
一行,符合约定的n的0,2表示(在表示中不能有空格)。样例输入
137
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
递归处理:
#include <bits/stdc++.h>
using namespace std;
void solve(int x){
int a[30];
if(x==0)printf("0");
else if(x==1)printf("");
else if(x==2)printf("2");
else{
memset(a,0,sizeof(a));
int k=0,f=0;
while(x){
a[k++]=x%2;
x/=2;
}
for(int i=k-1;i>=0;i--)
if(a[i]){
if(f==0)f=1;else printf("+");
if(i!=1)printf("2(");else printf("2");
solve(i);
if(i!=1)printf(")");
}
}
}
int main(){
int n;
cin>>n;
solve(n);
return 0;
}