首页 > Windows开发 > 详细

acwing 3483

时间:2021-05-19 23:48:49      阅读:26      评论:0      收藏:0      [点我收藏+]

acwing 3483.2的幂次方

每个正数都可以用指数形式表示。

例如,137=27+23+20。

让我们用 a(b) 来表示 ab。

那么 137 可以表示为 2(7)+2(3)+2(0)。

因为 7=22+2+20,3=2+20,所以 137 最终可以表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。

给定一个正数 n,请你将 n 表示为只包含 0 和 2 的指数形式。

输入格式

输入包含多组数据。

每组数据占一行,一个正数 n。

输出格式

每组数据输出一行,一个指数形式表示。

数据范围

1≤n≤20000,
每个输入最多包含 100 组数据。

输入样例:

1315

输出样例:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

思路:
1315=2(7)+2(3)+2(0),求出1315的2的次方组合后我们还有求其中2的指数的组合,然后依次加入到括号当中所以用递归就直接可以求出来了。

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

string dfs(int x)
{
    string res;
    
    for(int i = 14; i >= 0; i --) // 因为最大值是20000,所以最多也就2的14次方
    {
        if(x >> i & 1)// 判断x的最高位,然后i就是其中2的指数
        {
            if(res.size()) res += ‘+‘;//在不为1的时候要用+号连接
        
            if(!i) res += "2(0)";//如果为0的话就加上2(0)
            else if(i == 1) res += "2";// 如果为1就加上2
            else res += "2(" + dfs(i) + ")";// 如果不为0或者1那么就代表我
            //们可以以将指数再分解,用2(dfs(i))这样的形式括起来,将i分解后的字符串加到答案中。
        }
    }
    
    return res;
}

int main()
{
    int n;
    
    while(cin >> n)
    {
        cout << dfs(n) << endl;
    }
    
    return 0;
}

acwing 3483

原文:https://www.cnblogs.com/wdxt/p/14787156.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!