https://www.acwing.com/problem/content/description/126/
大意,一个a进制的数除以b,商还是a进制,余是b进制(b进制的后序)
核心
代码如下:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void)
{
int t;
cin>>t;
while(t--)
{
int a,b;
string a_line,b_line;
vector<int> v1,v2;
cin>>a>>b>>a_line;
for(auto c:a_line)
{if('a'<=c&&c<='z') v1.push_back(c-'a'+36);
if('0'<=c&&c<='9') v1.push_back(c-'0');
if('A'<=c&&c<='Z') v1.push_back(c-'A'+10);}
reverse(v1.begin(),v1.end());
while(v1.size())
{
int r=0;
for(int i=v1.size()-1;i>=0;i--)
{
v1[i]+=r*a;
r=v1[i]%b;
v1[i]/=b;
}
v2.push_back(r);
while(v1.size()&&v1.back()==0) v1.pop_back();
}
reverse(v2.begin(),v2.end());
for(auto x:v2)
{
if(0<=x&&x<=9) b_line+=char(x+'0');
if(10<=x&&x<=35) b_line+=char(x-10+'A');
if(36<=x&&x<=61) b_line+=char(x-36+'a');
}
cout<<a<<" "<<a_line<<endl;
cout<<b<<" "<<b_line<<endl<<endl;
}
}
该题也可以自己推出相除算法
大位数的相除(用字符串实现)