文章

10

粉丝

143

获赞

3

访问

51.0k

头像
递归
P1282 上海交通大学机试题
发布于2022年2月26日 13:06
阅读数 4.2k

分析题意不难发现,最终输出表达式中只允许出现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;

}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发