1208
2的幂次方表示
【题目描述】
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=22+2+20(21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=210+28+25+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
【输入】
一个正整数n(n≤20000)。
【输出】
一行,符合约定的n的0,2表示(在表示中不能有空格)。
【输入样例】
137
【输出样例】
2(2(2)+2+2(0))+2(2+2(0))+2(0)
1208
分 析
1、边界是最里面括号的数,2和0;
2、按照等式的书写规律,依次递进;
3、所以补足数的递归;
1208
代 码
#include
using namespace std;
int a[17];
void mf(int n,int i)
{
if(n==0||n==2){
cout<
return;
}//既是边界又是特判
for(;;){
while(a[i]>n) i--;
if(a[i]!=2){
cout<
mf(i,i);
cout<
}
else
cout<<2;
if(n-a[i]>0) cout<
else return;
}
}
int main()
{
int n,i;
a[0]=1;
for(i=1;a[i-1]<20000;i++) a[i]=a[i-1]*2;
i--;
cin>>n;
mf(n,i);
}
1208
坑 点
规律太不好找,完蛋;
今天回答了两个学生的问题,赶时间;