1 solutions
-
0
C :
#include<stdio.h> #include<math.h> void fun(int n) { int i; if(n == 3) printf("2+2(0)"); else if(n == 2) printf("2"); else if(n == 1) printf("2(0)"); else { printf("2("); for(i = 14;i>=0;i--) if((int)pow(2,i)<=n) { fun(i); break; } printf(")"); if(n-(int)pow(2,i)) { printf("+"); fun(n-(int)pow(2,i)); } } } int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); fun(n); printf("\n"); } return 0; }C++ :
#include<iostream> #include<cstdio> using namespace std; void my_print(int n) { int flag = 0; // 标记 // 1 <= n <= 20000 // 2^15次方足够存下所用数字的大小 for(int i = 15; i >= 0; i--) { // 利用位运算方便判断2的次幂数 if(n & (1<<i)) { // 大于2的话需要继续递归 if(flag) cout << "+"; switch(i) { case 0: cout << "2(0)"; break; case 1: cout << "2"; break; case 2: cout << "2(2)"; break; default: cout << "2("; my_print(i); cout << ")"; break; } flag = 1; } } } int main() { int M; cin >> M; while(M--) { int n; // 数字n cin >> n; my_print(n); cout << endl; } return 0; }
- 1
Information
- ID
- 18475
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- (None)
- # Submissions
- 0
- Accepted
- 0
- Uploaded By