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