题解 | #10进制 VS 2进制#

10进制 VS 2进制

https://www.nowcoder.com/practice/fd972d5d5cf04dd4bb4e5f027d4fc11e

难点在于实现模拟人手动计算加法和乘法的过程
#include<vector>
#include<string>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

string Divde(string str, int x) {
	int remainder = 0;
	for (int i = 0; i < str.size(); i++) {
		int temp = remainder * 10 + str[i] - '0';
		str[i] = temp / x +'0';
		remainder = temp % 2;

	}
	int pos = 0;
	while (str[pos++] == '0');
	pos--;
	str = str.substr(pos);
	return str;
}

string Multiple(string str,int x) { //实现字符串的乘法
	int carry = 0; // 保存进位
	for (int i = str.size() - 1; i >= 0; i--) {
		int current = x * (str[i] - '0') + carry;
		str[i] = current % 10 + '0';
		carry = current / 10;

	}
	if (carry != 0)
		str = "1" + str;
	return str;
}

string Add(string str, int x) {  //实现字符串的加法
	int carry = x;//记录进位
	for (int i = str.size() - 1; i >= 0; i--) {
		int temp = (str[i]-'0') + carry;
		str[i] = temp % 10+'0';
		carry = temp / 10;
	}
	if (carry != 0)
		str = "1" + str;
	return str;


}



int main() {
	string  str;
	while (cin >> str) {
		vector<int> vec;
		while (str != "") {
			vec.push_back((str[str.size()-1 ]-'0') % 2);
			str = Divde(str, 2);
		}
		//此时得到便为二进制的逆序
		string answer = "0";
		for (int i =0; i < vec.size(); i++) {
			answer = Multiple(answer, 2);
			answer = Add(answer, vec[i]);

		}
		cout << answer << endl;
	}
}

全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1153274次浏览 17159人参与
# 通信和硬件还有转码的必要吗 #
11245次浏览 101人参与
# OPPO开奖 #
19380次浏览 268人参与
# 和牛牛一起刷题打卡 #
19137次浏览 1636人参与
# 实习与准备秋招该如何平衡 #
203572次浏览 3629人参与
# 大厂无回复,继续等待还是奔赴小厂 #
5041次浏览 33人参与
# 不去互联网可以去金融科技 #
20879次浏览 259人参与
# 通信硬件薪资爆料 #
266102次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2236次浏览 34人参与
# 互联网公司评价 #
97773次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25041次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
455031次浏览 5127人参与
# 国企和大厂硬件兄弟怎么选? #
53932次浏览 1013人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14649次浏览 349人参与
# 硬件人的简历怎么写 #
82299次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19415次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28667次浏览 249人参与
# 学历对求职的影响 #
161299次浏览 1804人参与
# 你收到了团子的OC了吗 #
538911次浏览 6390人参与
# 你已经投递多少份简历了 #
344374次浏览 4963人参与
# 实习生应该准时下班吗 #
97042次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63532次浏览 622人参与
牛客网
牛客企业服务