AcWing 3374. 进制转换2
原题链接
中等
作者:
小.bug
,
2022-08-10 15:22:34
,
所有人可见
,
阅读 565
#include <bits/stdc++.h>
using namespace std;
int m, n;
string x;
//高精度除法
vector<int> div(vector<int> A, int& r)
{
vector<int> C;
r = 0;
for(int i = A.size() - 1; i >= 0; i --)
{
r = r * m + A[i];
C.push_back(r / n);
r %= n;
}
reverse(C.begin(), C.end());
while(C.size() && C.back() == 0) C.pop_back(); //去前导0
return C;
}
int main()
{
vector<int> A;
cin >> m >> n >> x;
//vector存储大数,低位在前,高位在后
for(int i = x.size() - 1; i >= 0; i --)
{
if(x[i] >= '0' && x[i] <= '9') A.push_back(x[i] - '0');
else A.push_back(x[i] - 'A' + 10);
}
string res; //记录答案
//转为几进制就除以几,转2进制用除2法,转m进制就用除m法
while(A.size())
{
int r = 0;
A = div(A, r);
if(r >= 0 && r <= 9) res += (r + '0');
else res += (r - 10 + 'a');
}
reverse(res.begin(), res.end());
cout << res << endl;
return 0;
}
请问为什么一个n进制的数除以m,余数是m进制,商还是n进制呢。我知道十进制是除以2,然后商是10进制,余数排列起来就是2进制结果。为什么通用性也可以呢。