题目描述:
问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2+2^0 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如:1315=2^10+2^8+2^5+2+1 所以1315最后可表示为: 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 输入格式 正整数(1<=n<=20000) 输出格式 符合约定的n的0,2表示(在表示中不能有空格) 样例输入 137 样例输出 2(2(2)+2+2(0))+2(2+2(0))+2(0) 样例输入 1315 样例输出 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 提示 用递归实现会比较简单,可以一边递归一边输出
代码如下:
1 #include <stdio.h> 2 3 void e(int n) 4 { 5 int i,cur; 6 for (i=0,cur=1;cur<=n;cur<<=1,i++); 7 printf("2"); 8 while (cur > 0) 9 { 10 if (cur & n) 11 { 12 if (cur>2) 13 { 14 printf("("); 15 e(i); 16 printf(")"); 17 } 18 if (cur==2); 19 if (cur==1) 20 printf("(0)"); 21 if ((n-=cur) != 0) 22 printf("+2"); 23 } 24 cur>>=1,i--; 25 } 26 return ; 27 } 28 29 int main(void) 30 { 31 int n; 32 scanf("%d",&n); 33 e(n); 34 return 0; 35 }
代码参考:https://www.cnblogs.com/zhangzimu/p/6193272.html
解题思路:
先计算输入数字的二进制有多少位
然后递归输出其对应二进制上为1的,
每次输出后都减去对应的值,直至为0