/*#include<stdio.h> int swap(int *a,int *b) { int temp=*a; *a=*b; *b=temp; return 0; } int B2D(int n,int *A) { int i=0,j; while(n!=0) { A[i++]=n%2; n/=2; } n=i; for(i=0,j=n-1;i!=j;i++,j--)swap(&A[i],&A[j]); return n; } int main() { int A[20]; int i,n=B2D(127,A); for(i=0;i<n;i++)printf("%d",A[i]); }*/ #include<stdio.h> #include<string.h> /*static int tag=0; int B2D(int n,int *A) { int i=0,j; while(n!=0) { A[i++]=n%2; n/=2; } n=i; return n; } int f(int* A,int pos,int n) {if(pos>=n)return 0; if(tag++>0)printf("+"); if(pos==0){printf("0");return 0;} if(pos==1){printf("2");return 0;} else printf("2("); int B[20],m=B2D(pos,B); f(B,0,m); f(A,pos+1,n); printf(")"); //for(i=0,j=n-1;i!=j;i++,j--)swap(&A[i],&A[j]); return n; }*/ static int tag = 0; static char str[500]; void f(int n) { if (n == 0) { strcat(str, "2(0)"); return; } if (n == 1) { strcat(str, "2"); return; } int i = 0, j, A[20]; while (n != 0) { A[i++] = n % 2; n /= 2; } if (i == 0)return; for (j = i - 1; j >= 0; j--) { if (A[j] == 1 && j >= 2)strcat(str, "2("); if (A[j] == 1)f(j); if (A[j] == 1 && j >= 2)strcat(str, ")"); } } int main() { int num; scanf("%d",&num); f(num); int i, n = strlen(str); for (i = 0; i < n - 1; i++) { printf("%c", str[i]); if (str[i] == '2' && str[i + 1] == '2')printf("+"); if (str[i] == ')' && str[i + 1] == '2')printf("+"); } printf("%c", str[i]); }