首页 > 其他 > 详细

【noip1998】题解:2的幂次方

时间:2021-08-22 21:38:29      阅读:15      评论:0      收藏:0      [点我收藏+]

思路:设递归函数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 }

 

【noip1998】题解:2的幂次方

原文:https://www.cnblogs.com/jisuanjizhishizatan/p/15172806.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!