小垃圾的每日一刷
全都是有思路但写不出,然后就问度娘了
题目其实有提示,用递归来解
首先按照题目给出的范围可知开到2的14次方足以,所以先定义一个数组,值为2的下标次方,然后就是写好递归出口,再确定括号和加号位置,好了,直接贴代码
using namespace std;
void fun(int n)
{
int a[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};
if(n==0)
return;
if(n==1)
{
cout<<"2(0)";
return;
}
if(n==2)
{
cout<<"2";
return;
}
int i=14;
while(a[i]>n&&i>0)
i--;
cout<<2;
if(i>=2)//记住是大于等于,不然就会出现神奇的事
{
cout<<"(";
fun(i);
cout<<")";
}
n=n-a[i];
if(n)
cout<<"+";
fun(n);
}
int main()
{
int n;
cin>>n;
fun(n);
return 0;
}
我怎么能这么菜。。。。
代码参考于别的博主,因为太多相似就不贴链接了,望各位大佬见谅