#includeint c[20] = { 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768 };//由题意n最大为20000,所以最多会用到2的14次方//为了防止mid+1出错,故写到15次方int binarySearch(int x, int mid) { if (x >= c[mid] && x < c[mid + 1]) { return mid; } if (x >= c[mid + 1]) return 20; return -1;}int serch(int x) { //利用二分查找找到x的最大二次方 int left = 0; int right = 15; int mid; while (left <= right) { mid = (left + right) >> 1; if (binarySearch(x, mid) == -1) { right = mid - 1; } else if (binarySearch(x, mid) == 20) { left = mid + 1; } else { return mid; } }}void divite(int x) { //分治求解:因为每个整数的划分方法是一样的 if (x == 0) return; int flag = serch(x); int li = x - c[flag]; if (flag == 0) { printf("2(0)"); } if (flag == 1) { printf("2"); } if (flag > 1) { printf("2("); divite(flag); printf(")"); } if (li > 0) { printf("+"); divite(li); }}int main() { int n; scanf("%d", &n); divite(n); return 0;}