1. 程式人生 > 其它 >【noip1998】題解:2的冪次方

【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 }