华师一附中OI组
标题:
2的幂分解(NOIP1998)
[打印本页]
作者:
diggersun
时间:
2015-10-31 23:54
标题:
2的幂分解(NOIP1998)
本帖最后由 diggersun 于 2015-11-1 00:05 编辑
任何一个正整数都可以用2的幂次方表示.例如:137=2^7+2^3+2^0同时约定次方用括号来表示,即a^b可表示为a(b)由此可知,137可表示为:2(7)+2(3)+2(0)进一步:7=2^2+2+2^0 (2^1用2表示)3=2+2^0所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=2^10+2^8+2^5+2+1所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入:正整数(n<=20000)输出:符合约定的n的0,2表示(在表示中不能有空格)
#include<iostream>
using namespace std;
void mysearch(int i)
{ int r,s;
if (i==1) cout<<"2(0)";
else if (i==2) cout <<'2';
else if (i>2)
{
s=2;
r=0;
while (i>=s)
{
s=s*2;
r++;
}
cout<<"2(";
mysearch(r);
cout<<')';
s=s/2;
if (i-s>0)
{
cout<<'+';
mysearch(i-s);
}
}
}
int main()
{
mysearch(100);return 0;
}
复制代码
作者:
diggersun
时间:
2015-11-1 00:03
这个题考虑用递归来做,那么递归有两个出口,一个是1,一个是2,其他的数字都可以化成2^X1+2^X2+2^X3+***的形式,
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2