0
已采纳
张睿杰
初级天翼
初级天翼
此题不想多讲,核心代码
void digui(int n)
{
int y;
if(n==0) return;
for(int i=0;i<=15;i++)
{
y=i;
if(cf(2,i)>n)
{
y--;
break;
}
}
if(y==0) cout<<"2(0)";
if(y==1) cout<<"2";
if(y>1)
{
cout<<"2(";
digui(y);
cout<<")";
}
if(n!=cf(2,y))
{
cout<<"+";
digui(n-cf(2,y));
}
}
剩下不会我用QQ发给你
0
0
0
张舒斌
中级光能
中级光能
void f(int n)
{
int y;
for(int i=0;i<18;i++)//这一题要看准数据范围,n最大20000,而20000大概是2的15次方。保险起见,大一点。用y记录2的几次方。
{
y=i;
if(n<pow(2,i))//如果n小于2的i次方,则n里面就一定有2的i-1次方。当然,y存储的是第一次的i-1的数据
{
y--;
break;//所以break
}
}
if(y==0) cout<<"2(0)";//如果y=0,根据题目意思,输出2(0)
if(y==1) cout<<"2";//如果y=1,根据题意,输出2
if(y>1)//如果y>1,则y可以再次进行分解
{
cout<<"2(";//先输出一半
f(y);//递归,对y进行再次分解
cout<<")";//输出另一半
}
if(n!=pow(2,y))//因为n不一定是2的次方数,所以还要考虑剩下一点的情况
{
cout<<"+";//输出加号
f(n-pow(2,y));//递归,对n-pow(2,y),也就是还剩下一点进行分解
}
}
如:
1025=2(10)+2(0)
=2(2(3)+2)+2(0)
=2(2(2+2(0))+2)+2(0)