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