【洛谷】P1010 幂次方(分治、二进制、递归)
程序员文章站
2022-03-02 22:50:14
...
标签: 分治、二进制、递归
【题解】
思路主要是用二进制思想加上递归来解决,看起来简单,但是写的时候有点绕,参考了洛谷题解dalao的代码。(捂脸。。)
【代码】
#include <iostream>
#include <cmath>
using namespace std;
void compute(int x)
{
if (x == 0) return; //递归结束条件
int t = int(log(x) / log(2)); //找比x小的2次方中最大的,即从高位开始搜索
if (t == 0) cout << "2(0)"; //2的0次方
if (t == 1) cout << "2"; //2的1次方
if (t > 1) { //大于2的1次方,递归
cout << "2(";
compute(t);
cout << ")"; //结束递归后添加
}
if (pow(2, t) != x) { //x不等于pow(2, t),说明后面还接着数
cout << "+";
compute(int(x - pow(2, t)));
}
}
int main()
{
int n;
cin >> n;
compute(n);
return 0;
}