#include<bits/stdc++.h>
#include <iostream>
using namespace std;
//P1010 [NOIP1998 普及组] 幂次方
int n;
void m_search(int x)
{
if(n!=0)
{
//第一步:找出离n最近的2的次方
int p=1,q=0;//用于与n比较//统计次方
//每一次搜索都要打印一次2
printf("2");
while(x>=p)
{
++q;
p*=2;
}
--q;//多算了一次
//指数判断情况一:
//判断是2或0就打印输出
//若为2的1次方就不输出括号
if(q==0||q==2) printf("(%d)",q);//若y符合条件就直接输出 printf()里面千万不能用&符号,否则输出的是地址
//指数判断情况二:
if(q>=3)//因为0,1,2在上面就已经判断输出过
{
//若指数>=3,则递归继续输出
printf("(");
m_search(q);
printf(")");
}
//对剩余的数进行判断
x-=p/2;//之前判断的时候同样多算了一次
if(x)
{
printf("+");
m_search(x);
}
}
}
int main()
{
cin>>n;
m_search(n);
return 0;
}
P1010 幂次方
最新推荐文章于 2024-07-15 13:32:43 发布