AcWing 124. 数的进制转换
原题链接
简单
作者:
B1ackGod
,
2021-01-20 16:28:11
,
所有人可见
,
阅读 379
思路:进制转化
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int a,b;
string a_line,b_line;
cin>>a>>b>>a_line;
vector<int> num;
for(auto c:a_line){
if(c>='0' && c<='9') num.push_back(c-'0');
if(c>='A' && c<='Z') num.push_back(c-'A'+10);
if(c>='a' && c<='z') num.push_back(c-'a'+36);
}
reverse(num.begin(),num.end());//从左往右,低位到高位
vector<int> res;
while(num.size()){
int r=0; //存储每次短除后的余数
for(int i=num.size()-1;i>=0;i--){
num[i]+=r*a;
r=num[i]%b;
num[i]=num[i]/b;
}
res.push_back(r);
while(num.size() && num.back()==0)
num.pop_back();
}
reverse(res.begin(),res.end());
for(auto s:res){
if(s>=0&&s<10) b_line+=(char)(s+'0');
if(s>=10 && s<36) b_line+=(char)(s+'A'-10);
if(s>=36) b_line+=(char)(s+'a'-36);
}
cout<<a<<' '<<a_line<<endl;
cout<<b<<' '<<b_line<<endl;
cout<<endl;
}
return 0;
}