大数运算之进制转换

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

代码以下:数组

#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;
}
相关文章
相关标签/搜索