(luogu1010)幂次方


将一个数拆分成二进制, 对次数递归表示, 特殊处理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); //特殊处理0
else
{
for(int i(30);i>=0;--i) //二进制拆分
if(n&(1<<i))
{
if(i==1) cout << 2; //特殊处理2
else
{
printf("2(");
pow2(i);
cout << ')';
}
n -= (1<<i);
if(n>0) cout << '+';
}
}
}
int main()
{
int n;
cin >> n;
pow2(n);
return 0;
}