题目连接
- 该题是luogu试炼场的2-10:T2
题目大意
- 给出一个n,要求按照2的幂,拆分到最小;
- 按一定的要求输出;
题目分析
- 赤裸裸的递归题目
- 将一个数字递归拆分成不大于2的情况
解题思路
- 理解二进制的拆包思维
- 递归熟练度,细节也很少,代码详解
上代码
//luogu1010:幂次方
//解题思路:
//经典递归题:一直二进制拆包,拆不动了,然后归
#include<bits/stdc++.h>
int n;
void dfs(int x)
{
while(x>0)//对 x 进行二进制拆包
{
int t=1,s=0;
while(x-t>=t)
{
t*=2;s++;
}
if(s==1) printf("2");
else if(s==0) printf("2(0)");
else
{
printf("2(");
dfs(s);
printf(")");
}
if(x-t>0) printf("+");
x-=t;
}
}
int main()
{
scanf("%d",&n);
dfs(n);
return 0;
}