# [NOIP1998 普及组] 幂次方
## 题目描述
任何一个正整数都可以用 2 的幂次方表示。例如 137=2^7+2^3+2^0 。
同时约定方次用括号来表示,即 a^b 可表示为 a(b)。
由此可知,137 可表示为 2(7)+2(3)+2(0)
进一步:
7= 2^2+2+2^0 ( 2^1 用 2 表示),并且 3=2+2^0。
所以最后 137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。
又如 1315=2^{10} +2^8 +2^5 +2+1
所以 1315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。
## 输入格式
一行一个正整数 n。
## 输出格式
符合约定的 n 的 0, 2 表示(在表示中不能有空格)。
## 样例 #1
### 样例输入 #1
1315
### 样例输出 #1
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
说明/提示
【数据范围】
对于 100\%100% 的数据,1 <= n <= 2*10^4。
题解:
#include<iostream>
#include<cstring>
//包括头文件
using namespace std;
string run(int x,int i=0,string s=string("")){
if(x==0)return string("0");//如果为x零,直接返回0
do if(x&1)s=(i==1?"2":"2("+run(i)+")")+(s==""?"":"+")+s;//判断应输出的数字和是否该输出加号
while(++i,x=x/2);//while循环
return s;//返回s
}
int main(){
int x;
cin>>x;//输入x
cout<<run(x)<<endl;//调用函数并输出
}