题解 | #2的幂次方#非递归解法
2的幂次方
http://www.nowcoder.com/practice/7cf7b0706d7e4b439481f53e5fdac6e7
看上面的大都是递归解法,我当时是没想出来递归解法的,直接暴力解法,供大家娱乐参考。
正规考试建议还是递归的好。
#include<iostream>
#include<string.h>
using namespace std;
string toBinary(int n) {
string bin="";
int index=0;
while(n!=0) {
if(n%2!=0) {
string temp="";
if(index!=1) {
temp="2(";
temp.push_back(index+'0');
temp+=")";
} else {
temp="2";
}
n=n>>1;
if(n!=0) {
temp.insert(0, "+");
}
bin=temp+bin;
} else {
n=n>>1;
}
index++;
}
return bin;
}
string sRes="";
// 分解十进制数的表达方式
void process(int n) {
if(n==0) {
printf("0");
return;
}
sRes=toBinary(n);
for(int i=0; i<sRes.length()-1; i++) {
if(sRes[i]!='0'&&sRes[i]!='2'
&&sRes[i]!='('&&sRes[i]!=')'
&&sRes[i]!='+') {//大于10的数也能处理,sRes[i]+'0'='()+'不能处理
sRes=sRes.substr(0,i)
+toBinary(sRes[i]-'0')
+sRes.substr(i+1, sRes.length());
i=0;//从头开始遍历,因为字符串mRes已变
}
}
}
int main() {
int n;
while(scanf("%d", &n)!=EOF) {
process(n);
cout<<sRes<<endl;
}
return 0;
}