将一个数拆分成二进制,对次数递归表示,特殊处理 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; }
   |