数据范围
一个正整数n(n≤20000)。
样例输入
137
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
AC代码
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int a[15] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};
void search(int n){
if(!n) return;
int rnt = n, temcnt = 0;
for(int i = 14; i >= 0; --i){
if(a[i] > rnt) continue;
if(a[i] <= rnt&&i > 1){
rnt -= a[i];
if(temcnt) printf("+");
printf("2(");
search(i);
printf(")");
}
if(i == 1) {
rnt -= 2;
if(temcnt) printf("+");
printf("2");
}
if(!i){
if(temcnt) printf("+");
printf("2(0)");
}
++temcnt;
}
}
int main(){
int n; cin >> n;
search(n);
return 0;
}