题目:http://cxsjsxmooc.openjudge.cn/2019t2springw2/2/
分析:
for exmple
137=27+23+2*0=…将一个大的数据拆分成小的数据,并且小的数据可以按同一方法继续拆分,很容易让我们想到递归算法
n=2^y+c;递归的边界条件是x1或x2;
f(7)=2(f(2))+f(3)=2(f(2))+f(2)+f(1))
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
void print(int n)
{
int i=0;
while(pow(2,i)<=n)
{
i++;
}
i--;//break出来的i需要往回倒一下
if(i==0)
{
cout<<"2(0)";
return;
}
if(i==1)
{
cout<<"2(1)";
}
else
{
cout<<"2(";
print(i);
cout<<")";
}
if(n-pow(2,i)>0)
{
cout<<"+";
print(n-pow(2,i));
}
}
int main()
{
int n;
cin>>n;
print(n);
cout<<endl;
}