将一个数拆分成二进制,对次数递归表示,特殊处理 0 和 2 的情况
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <iostream> #include <cstdio> using namespace std; void pow2(int n) { if(n==0) printf("%d",n); else { for(int i(30);i>=0;--i) if(n&(1<<i)) { if(i==1) cout << 2; else { printf("2("); pow2(i); cout << ')'; } n -= (1<<i); if(n>0) cout << '+'; } } } int main() { int n; cin >> n; pow2(n); return 0; }
|