大数的之间的进制转换不能简单的用取余法来做,这样会导致溢出。以牛客网的这道题10进制 vs 2进制 为例,题目给的数字已经达到了1000位,即使用long long类型也没办法存储,所以要用字符数组来存储。然后用模拟手算除法的方式来进行进制转换。

代码如下:

#include<bits/stdc++.h>
using namespace  std;
string conversion(int oldbase,string str,int newbase)
{
	int len = str.size();
	string s;
	for(int i = 0;i < len;)
	{
		int k = 0;
		for(int j = i;j < len;j++)
		{
			int temp = (k*oldbase + str[j] - '0')%newbase;//手算除法得到的余数 
			str[j] = (k*oldbase + str[j] - '0')/newbase +'0';//手算除法得到的商 
			k = temp;	
		}
		s += char(k + '0');
		while(str[i]=='0') i++; 
	}
    reverse(s.begin(),s.end());
	return s;
	
}
int main()
{	
	string num;
	while(cin >> num)
	{
		string a = conversion(10,num,2);
		reverse(a.begin(),a.end());
		num = conversion(2,a,10);
		cout << num << endl;
	}
	return 0;
} 

相关文章:

  • 2022-12-23
  • 2021-10-03
  • 2022-12-23
  • 2021-11-15
  • 2021-05-03
  • 2022-12-23
猜你喜欢
  • 2021-05-27
  • 2021-10-05
  • 2021-09-30
  • 2022-12-23
  • 2021-09-05
  • 2021-12-10
  • 2022-12-23
相关资源
相似解决方案