将一个数拆分成二进制, 对次数递归表示, 特殊处理0和2的情况
代码:
#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;
}
近期评论