问题描述 任何一个正整数都可以用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 #include <stdio.h> 2 #include <math.h> 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 }