因为关于进制转换的基础题老是写挂,为了防止考试简单题挂分,写了个板子,到时候直接套板子就行
没错这就是我目前的水平,进制的入门题都能写挂呜呜
原题是这个:
P1143 进制转换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:
![](https://i-blog.csdnimg.cn/blog_migrate/362d57ebd37f7e52cec6922c6c67cbe4.png)
板子:
#include <bits/stdc++.h>
using namespace std;
string x;
map<char,int> mp;
int n,m;
char t[50];
void init(){
for(int i=0;i<=9;i++) t[i]=i+'0',mp[i+'0']=i;
for(int i=10;i<=35;i++) t[i]=i-10+'A',mp[i-10+'A']=i;
}
int n_ten(string x){
int res=0;
for(int i=0;i<x.size();i++) res=res*n+mp[x[i]];
return res;
}
string ten_to_m(int x){
int tmp=x;
string s;
while(tmp){
s+=t[tmp%m];
tmp/=m;
}
reverse(s.begin(),s.end());
return s;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
init();
cin>>n>>x>>m;
int t=n_ten(x);
string ans=ten_to_m(t);
cout<<ans<<'\n';
}
其中t数组是为了把字符类型变成数字类型
mp是为了把数字类型变成字符类型
在转10进制和输出答案的时候,别忘了用这俩数组转化一下
然后n进制转m进制,就是先把n进制转10进制,再把10进制转m进制