AcWing 124. 数的进制转换
原题链接
简单
作者:
Lyle2021
,
2021-01-20 16:01:33
,
所有人可见
,
阅读 349
A->B 进制,不通过10进制中转
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int a,b;
string a_nums,b_nums;
cin>>a>>b>>a_nums;
vector<int> number;
for(auto c : a_nums){
if(c>='0'&&c<='9')number.push_back(c-'0');
if(c>='A'&&c<='Z')number.push_back(c-'A'+10);
if(c>='a'&&c<='z')number.push_back(c-'a'+36);
}
reverse(number.begin(),number.end());
vector<int> res;
while(number.size()){
//核心代码,手写计算进制转换可以清楚其原理
int r=0;
for(int i=number.size()-1;i>=0;i--){
number[i]+=r*a;
r=number[i]%b;
number[i]/=b;
}
res.push_back(r);
while(number.size()&&number.back()==0)number.pop_back();
}
reverse(res.begin(),res.end());
for(auto x : res){
if(x<=9)b_nums+=char('0'+x);
if(x>=10&&x<=35)b_nums+=char('A'+x-10);
if(x>=36&&x<=61)b_nums+=char('a'+x-36);
}
cout<<a<<' '<<a_nums<<endl;
cout<<b<<' '<<b_nums<<endl;
cout<<endl;
}
return 0;
}