ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

acwing 3483

2021-05-19 20:35:00  阅读:192  来源: 互联网

标签:1315 20 int res 3483 137 include acwing


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;
}

标签:1315,20,int,res,3483,137,include,acwing
来源: https://www.cnblogs.com/wdxt/p/14787156.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有