幂次方
参考:http://blog.csdn.net/clover_hxy/article/details/50178671
任何一个正整数都可以用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)
一个正整数n(n <= 20000)
符合约定的n的0, 2表示(在表示中不能有空格)
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 int value[15] = {1,2,4,8,16,32,64,128,256,512,1024, 4 2048,4096,8192,16384}; 5 void get2(int n){ 6 int i; 7 switch(n){ 8 case 0: 9 printf("0"); 10 return; 11 case 1: 12 printf("2(0)"); 13 return; 14 case 2: 15 printf("2"); 16 return; 17 default: 18 for(i = 14; i >= 0; i--){ 19 if(n >= value[i]) 20 break; 21 } 22 if(i == 1) 23 printf("2"); 24 else{ 25 printf("2("); 26 get2(i); 27 printf(")"); 28 } 29 n -= value[i]; 30 while(n > 0){ 31 for(i = 14; i >= 0; i--){ 32 if(n >= value[i]) 33 break; 34 } 35 if(i == 1) 36 printf("+2"); 37 else{ 38 printf("+2("); 39 get2(i); 40 printf(")"); 41 } 42 n -= value[i]; 43 } 44 return; 45 } 46 } 47 int main(){ 48 int n; 49 scanf("%d",&n); 50 get2(n); 51 return 0; 52 }