题解 | #进制转换#
进制转换
http://www.nowcoder.com/practice/0337e32b1e5543a19fa380e36d9343d7
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
//实现一个自己的BigInteger,本题只需要除法功能 不需要取余,到时候只需要看末位是奇数还是偶数
class BigInteger{
public:
string num;
BigInteger(string s):num(s){}
// BigInteger operator/(const BigInteger &b) const{//思路:模拟“竖式”那必须先实现乘法
// }//要实现乘法 就必须先实现加法。那还是后面再练。这题还是先用偷懒手段,只实现除以2
BigInteger Divtwo(void){//模拟竖式
BigInteger ans("");
int last = 0;
for(int i=0; i<num.size(); i++){
if((num[i]-'0'+last)/2 || ((num[i]-'0'+last)/2==0 && !ans.num.empty()) || num.size()==1){//last是继承者
ans.num.push_back((num[i]-'0'+last)/2 + '0');
}//商
//然后求余数继承给下一位
last = (num[i]-'0') % 2 * 10;//到最后一位,即便还有last,也会跳出循环而被忽略,成功实现"整除"
}
return ans;
}
};
string ConvertT2B(BigInteger x){
string s;
if(x.num == "0"){
s.push_back('0');
}else{
while(x.num != "0"){
s.push_back((x.num[x.num.size()-1]-'0')%2+'0');
x = x.Divtwo();
}
}
reverse(s.begin(),s.end());
return s;
}
int main(){
string s;
while(cin >> s){
BigInteger x(s);
printf("%s\n",ConvertT2B(x).c_str());
s.clear();
}
return 0;
}