题解 | 2的幂次方

#include <bits/stdc++.h>
using  namespace std;

string toBinary(int n){
    string a="";
    while(n!=0){
        a+=n%2+'0';
        n/=2;
    }
    return a;
}

string transN(int n){
    if(n==0) return "0";
    if(n==1) return "2(0)";
    if(n==2) return "2";
    string s=toBinary(n);
    string t="";
    for(int i=s.size()-1;i>=0;i--){
        if(s[i]=='1'){
            if(i==1)t=t+"2+";
            else t=t+"2("+transN(i)+")+";
        }
    }
    t.pop_back();
    return t;
}

int main(){
    int n;
    while(cin>>n){
        cout<<transN(n)<<endl;
    }
}

这里提供一个带函数的,上一个不太清晰,这里解释一下这个递归函数

tranN( x ) = 2( tranN( n1 ) ) + 2( tranN( n2 ) ) + 2( tranN( n3 ) ) + ...

这个就是递归函数,也就是说,这个函数的生成结果是一个字符串,字符串中的内容如果不是2(0) 2 2(2)就要重新调用一个相同的函数,那么,这个递归方程和结束条件就清晰了,这样,我们如果获取到这个二进制字符串,对应的n1,n2... 就是对应位的序号,然后可以按照我的写法,也可以按照自己的想法来,只需要进行一个判断就可以很容易的写出来,甚至可以不用加上结束判断,感兴趣的小伙伴可以优化一下这个代码

全部评论

相关推荐

海能达 海外解决方案岗 15k-20k
乐观的大卫:测试这个薪资在北京太低了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务