题解 | #进制转换#

进制转换

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;
}
全部评论

相关推荐

11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务