【noip1998】题解:2的幂次方

思路:设递归函数dfs(x)用于输出x的幂次方

最容易的思路:0不输出,1输出为2(0),2输出2,剩下的递归执行。

每一次递归:例如7,拆分为4+3,先拆出最大的是2的次方的数出来,输出4,再把3分拆输出。

对于3,拆分为2+1。

代码:

 

 1 //flag用于标记输出时前面是否需要加+号
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int n;
 5 void dfs(int n,bool flag){
 6     if(n==0)return;
 7     if(flag)cout<<"+";
 8     if(n==2)cout<<"2";
 9     else if(n==1)cout<<"2(0)";
10     //else if(n==0)return;
11     else{
12         int i;
13         for(i=0;;i++){
14             if(pow(2,i)>n)break;
15         }
16         i--;
17         if(i==1)cout<<"2";
18         else{
19             cout<<"2(";
20             dfs(i,0);
21             cout<<")";
22         }
23         dfs(n-pow(2,i),1);
24     }
25 }
26 int main(){
27     cin>>n;
28     dfs(n,0);
29 }

 

posted @ 2021-08-22 17:05  计算机知识杂谈  阅读(217)  评论(0编辑  收藏  举报