大數運算之進制轉換

大數的之間的進制轉換不能簡單的用取餘法來作,這樣會致使溢出。以牛客網的這道題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;
}
相關文章
相關標籤/搜索