问题描述 任何一个正整数都可以用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表示(在表示中不能有空格)
AC代码:
1 #include2 #include 3 #define M 2 4 5 void dfs(int x) 6 { 7 int i; 8 while (x != 0 && x != 2) 9 {10 printf("%d",M);11 for (i = 0 ; pow(M,i+1) <= x ; i ++); 12 if (i != 1)13 {14 printf("(");15 dfs(i);16 printf(")");17 }18 x -= pow(M,i);19 if (x == 0)20 {21 return ;22 }23 printf("+");24 } 25 printf("%d",x);26 return ;27 }28 29 int main(void)30 {31 int n;32 scanf("%d",&n);33 dfs(n);34 return 0;35 }