文章
10
粉丝
143
获赞
3
访问
54.8k
分析题意不难发现,最终输出表达式中只允许出现2和0两个数字。
考虑使用递归处理。
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int n;
void fun(int num)
{
int i=0;
while(pow(2,i)<=num) i++;
i--;//找到最大的小于等于num的2的幂次i
if(i==0) printf("2(0)");
else if(i==1) printf("2");
else
{
printf("2(");
fun(i);
printf(")");
}
int remainder=num-pow(2,i);
if(remainder!=0)
{
printf("+");
fun(remainder);
}
return ;
}
int main()
{
while(cin>>n)
{
fun(n);
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发