题解 | 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... 就是对应位的序号,然后可以按照我的写法,也可以按照自己的想法来,只需要进行一个判断就可以很容易的写出来,甚至可以不用加上结束判断,感兴趣的小伙伴可以优化一下这个代码