1208:2的幂次方表示
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
任何一个正整数都可以用2的幂次方表示。例如:137=2^7+2^3+2^0
同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=2^2+2+2^0(21用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表示(在表示中不能有空格)。
【输入样例】
137
【输出样例】
2(2(2)+2+2(0))+2(2+2(0))+2(0)
【来源】
No
1. #include<cstdio> 2. #include<iostream> 3. #include<cstring> 4. using namespace std; 5. int a[17]={0}; 6. int work(int n) 7. { 8. if(n==2) {printf("2");return 0;} 9. if(n==0) {printf("0");return 0;} 10. while(1){ 11. int i; 12. for(i=16;a[i]>n;i--); 13. if(a[i]!=2){ 14. printf("2("); 15. work(i); 16. printf(")"); 17. } 18. else printf("2"); 19. if((n-a[i])>0) printf("+"),n-=a[i]; 20. else return 0; 21. } 22. } 23. int main() 24. { 25. a[0]=1; 26. for(int i=1;i<=16;i++) a[i]=a[i-1]*2; 27. int n; 28. scanf("%d",&n); 29. work(n); 30. return 0; 31. }