文章
10
粉丝
143
获赞
63
访问
62.5k
分析题意不难发现,最终输出表达式中只允许出现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;
}
登录后发布评论
暂无评论,来抢沙发