题解 | #进制转换#

进制转换

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

相关推荐

感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇&nbsp;延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗&nbsp;就业数据都在造假,真实的就业困难不去解决&nbsp;一个个真是好样的
从今天开始狠狠卷JV...:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务