题解 | #2的幂次方#

2的幂次方

https://www.nowcoder.com/practice/7cf7b0706d7e4b439481f53e5fdac6e7

递归思想要好好消化,先得出非零的幂,然后按幂从高到低组字符串

#include <iostream>
#include "vector"
using namespace std;
vector<int> getExponential(int n) {
    vector<int> ans;
    int exp = 0;
    while (n != 0) {
        if (n % 2 == 1) ans.push_back(exp);
        n /= 2;
        exp++;
    }
    return ans;
}
string present(int n) {
    vector<int> exps = getExponential(n);
    string ans;
    for (int i = exps.size()-1; i >=0; i--) {
        int item = exps[i];
        if (item == 0)ans += "2(0)";
        else if (item == 1) ans += "2";
        else if (item == 2) ans += "2(2)";
        else {
            ans += "2(" + present(item) + ")";
        }
        if (i != 0) ans += "+";
    }
    return ans;
}
int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        cout <<present(n) << endl;


    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

浩浩没烦恼:一二面加起来才一个小时? 我一面就一个小时多了
点赞 评论 收藏
分享
10-17 09:06
门头沟学院 Java
8527睿:有些地方感觉不太契合实际啊。简单看看第二个项目那里。 比如canal流式读取数据库日志进行缓存同步那里。可不可以加个消息中间件来确保SQL语句的削峰填谷。一般都是canal+消息中间件 双层鉴权登录那里,描述有点模糊,登录是鉴权的前提唉,后面功能都在说是登录,鉴权没有啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务