P1010 幂次方(分治)

时间:2023-03-09 09:15:51
P1010 幂次方(分治)

https://www.luogu.com.cn/problem/P1010

刚刚看到这个题时,有点懵,如果说这是个数学题

比如说7,应该先求出7 = 4 + 2 + 1;

即先分解出里面应该有最多的2的个数,然后再往下递推

  1. 算出2的多少次幂最接近给出的n;
  2. 用原来n的数减去2的幂,如果这个数大于2,继续对新的n进行搜索;
  3. 如果幂大于2,对幂进行上述搜索;
  4. 一旦输入函数的数为0(退出)或1(2的0次幂)或2(2的1次幂,这时候1不需要输出),输出;
#include <bits/stdc++.h>
using namespace std;
int n;
void search(int x){
if(!x)
return;
int p = ,q = ;
cout << ;
while(x >= p){
p *= ;
q++;
}
q--;
if(!q || q == )
cout << "(" << q << ")";
if(q >= ){
cout << "(";
search(q);
cout << ")";
}
x -= p / ;
if(x){
cout << "+";
search(x);
} }
int main(){
ios::sync_with_stdio();
cin >> n;
search(n);
return ;
}