问题 D: 进制转换
时间限制: 1 Sec 内存限制: 32 MB
提交: 170 解决: 62
[提交][状态][讨论版][命题人:外部导入]
题目描述
将M进制的数X转换为N进制的数输出。
输入
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
输出
输出X的N进制表示的数。
样例输入
10 2
11
样例输出
1011
提示
注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。
#include<iostream>
#include<string>
using namespace std;
int main() {
int M, N;
string s;
while (cin >> M >> N >> s) {
int a[1050], b[1050]; //a存放M进制输入,b存放N进制输出
int len = s.length();
for (int i = 0; i < len; i++) {
if (s[i] >= '0'&&s[i] <= '9')
a[i] = s[i] - '0';
else a[i] = s[i] - 'A' + 10;
}
int index = 0, sum = 1;
//index=b[]下标,sum代表a是否被除尽为0
while (sum) {
sum = 0;
for (int i = 0; i < len; i++) {
sum += a[i] / N;
if (i == len - 1) b[index++] = a[i] % N;
else a[i + 1] += (a[i] % N)*M;
a[i] /= N;
}
}
if (index == 0) {
cout << 0;
}
else {
for (int i = index-1; i >= 0; i--) {
if (b[i] >= 0 && b[i] <= 9)
cout << b[i];
else cout << (char)('a' + b[i] - 10);//不添加char转换会报错
}
}
cout << endl;
}
return 0;
}