题解 | 数制转换
数制转换
https://www.nowcoder.com/practice/8ef02ef8571b417d8c311a87861f7a03
#include <iostream>
#include<algorithm>
using namespace std;
//由于本题不涉及长整数,所以可以先转换为10进制,再转换为要得到的进制
int ctoi(char c) {
if (c <= '9')return c - '0';
//大写字母的ascii码值更小
else if (c <= 'Z')return c - 'A'+10;
else return c - 'a' + 10;
}
//a的asicii码是
char itoc(int x) {
if (0 <= x && x <= 9)return '0' + x;
else return x - 10 + 'A';
}
int main() {
int a, b;
string num;
while (cin >> a >> num >> b) {
//先变成10进制再变成b进制
long decimal = 0;
//秦九韶算法
for (int i = 0; i < num.size(); i++) {
//注意这里不是累加,是等于
//decimal += decimal * a + ctoi(num[i]);
decimal = decimal * a + ctoi(num[i]);
}
string res;
//变成十进制后再用短除法变为b进制
while (decimal)
{ //加上余数
res += itoc(decimal % b);
decimal /= b;
}
//短除法得到的存在res中的结果是反着的要倒过来
reverse(res.begin(), res.end());
cout << res << endl;
}
}
// 64 位输出请用 printf("%lld")
查看6道真题和解析