Leetcode KY30进制转换

在这里插入图片描述
在这里插入图片描述
由于题中给出的数字最长可达30位,所以不能单纯的用除法来求二进制,应该以string的形式接收字符串,然后一位一位的来除。
例如:128 首先除2余0,再除2余0,除到最后余1,则128的二进制可以写为1000 0000。即把之前所得的余数反过来写。
所以这里要设计一个函数来按位除,最终所得的数字一定比原来小。

#include<iostream>
#include<vector>
#include<string>
using namespace std;
string Div(string s, int x)
{
    
    
	int res = 0;
	for(int i = 0; i < s.length(); i++)
	{
    
    
		int now = res * 10 + (s[i] - '0');
		s[i] = now / x + '0';
		res = now % x;
	}
	int pos = 0;
	while(s[pos] == '0')
	pos++;//找到不为0的起始位置,如0010,这样最终返回的是不包含0的字符串
	return s.substr(pos);
}
int main()
{
    
    
	string str;
	while(cin >> str)
	{
    
    
		vector<int> binary;
		while(str.size() != 0)
		{
    
    
			int last = str[str.length()-1]-'0';
			binary.push_back(last%2);
			str = Div(str, 2);
		}
		for(int i = binary.size()-1; i >= 0; i--)
		cout << binary[i];
		cout << endl;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/108267544
ky