题解 | #进制转换2# 分两步处理即可解决一切进制转换
进制转换2
https://www.nowcoder.com/practice/ae4b3c4a968745618d65b866002bbd32
万变不离其宗,其实就是进制转换。(此方法不使用数字很大的情况,原理一样,但是数字很大只能当作字符串处理。)
- M进制转10进制:先乘再加
- 10进制转N进制:先模再除
#include<bits/stdc++.h>
using namespace std;
int charToInt(char c) {
if(c>='0'&& c<='9') {
return c-'0';
} else {
return c-'A'+10;
}
}
// 把M进制数str转化为10进制
long long transfer10(string str, int M) {
long long res=0;
for(int i=0; i<str.length(); i++) {
res=res*M;
res=res+charToInt(str[i]);
}
return res;
}
char intToChar(int x) {
if(x>=0&& x<=9) {
return x+'0';
} else {
return x-10+'A';
}
}
// 把10进制数str转化为 N进制
string transferN(long long x, int N) {
string res="";
while(x!=0) {
res=intToChar(x%N)+res;
x/=N;
}
return res;
}
// 输入数据不会太大!不需要字符串处理方法,否则太复杂(大于10进制)
int main() {
int M, N;//(2, 36)即可能有Z这个字母(36-10+'A')
string str;
while(cin>> M>> N) {
cin>> str;
long long shijinzhi=transfer10(str, M);
cout<< transferN(shijinzhi, N)<< endl;
}
return 0;
}
查看13道真题和解析