P1010 [NOIP1998 普及组] 幂次方
题目链接 https://www.luogu.com.cn/problem/P1010
看到这么多括号花里胡哨的就不想做。。。但其实还是个比较简单的题的。
思路放代码里吧。
放AC代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 void dfs(int x)//x为需要分解的数 5 { 6 int y; 7 if(x==0) return; 8 for(int i=0;i<=15;i++){ 9 y=i;//y表示刚好超过x的2的i次幂 10 if(pow(2,i)>x){//当2的i次幂第一次比x大时 11 y--; 12 break; 13 } 14 } 15 if(y==0) cout<<"2(0)";//0次幂 16 if(y==1) cout<<"2";//1次幂 17 if(y>1){ 18 cout<<"2("; 19 dfs(y);//如果幂数大于1,递归幂数(y) 20 cout<<")"; 21 } 22 if(x!=pow(2,y)){//如果x!=2的y次幂时 23 cout<<"+"; 24 dfs(x-pow(2,y));//递归剩余的 25 } 26 } 27 int main() 28 { 29 cin>>n; 30 dfs(n); 31 return 0; 32 }