大数的之间的进制转换不能简单的用取余法来作,这样会致使溢出。以牛客网的这道题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; }