进制转换——题目描述
在一次 NOIP 初赛模拟考试中,小明碰到了一道进制转换的题,由于没有学过进制转换,导致成绩不理想,于是他下决心搞明白进制转换是怎么回事。通过查阅资料他发现,进制有很多种,通常的有二进制、八进制、十进制和十六进制等。如果不超过十进制,0到9?的十个数字就够用了,但超过十进制时,两位数字需要用一个字符去表示。通常用大写字母A表示十进制中的10,用大写字母B表示十进制中的11,用大写字母 C表示十进制中的12,用大写字母D表示十进制中的13,用大写字母E表示十进制中的14,用大写字母F表示十进制中的15,以此类推。
现在他想编写一个程序,将一个任意的?n?进制数转换成?m?进制的数。
输入格式
第一行仅有一个正整数 n (2≤n≤16),表示给定数是一个?n?进制数。
第二行是一个字符串,描述一个合法的?n?进制正数。
第三行仅有一个正整数 m?(2≤m≤16),表示要将给定的?n?进制数转换成?m?进制数。
注意:?所给的?n?进制数在其对应的 10?进制数中大小不会超过?10?。
输出格式
一行,输出转换成?m?进制的数。
样例输入
2
101101
10
样例输出
45
代码:
#include <iostream>
#include <string>
using namespace std;
int k, ans = 0,si,k2;
string n;
int main() {
cin >>k>> n>>k2;
si=n.size();
for (int i = 0; i < si; i++){
if (n[i] >= '0' && n[i] <= '9'){
ans = ans * k + n[i] - '0';
} else {
ans = ans * k + n[i] - 'A' + 10;
}
}
int digit[25];
int cnt=0;
while (ans) {
digit[cnt++] = ans % k2;
ans /= k2;
}
for (int i = cnt - 1; i >= 0; i--) {
if (digit[i] < 10) {
cout << digit[i];
} else {
cout << char(digit[i] - 10 + 'A');
}
}
cout << endl;
return 0;
}