大数运算之进制转换

大数的之间的进制转换不能简单的用取余法来做,这样会导致溢出。以牛客网的这道题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;
} 
原文地址:https://www.cnblogs.com/multhree/p/10779549.html