洛谷-P1143 进制转换
洛谷-P1143 进制转换
题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制\(n(2≤n≤16)\),第二行是一个n进制数,若\(n>10\)则用大写字母\(A-F\)表示数码\(10-15\),并且该\(n\)进制数对应的十进制的值不超过\(1000000000\),第三行也是一个正整数,表示转换之后的数的进制\(m(2≤m≤16)\)。
输出格式
一个正整数,表示转换之后的\(m\)进制数。
输入输出样例
输入 #1
16
FF
2
输出 #1
11111111
C++代码
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
char a[35];
int main() {
int i, n, m, t, d=0;
string b;
cin >> n >> b >> m;
int len = b.size();
for (i=len-1; i>=0; --i) {
t = (b[i]<'A')?(b[i]-'0'):(b[i]-'A'+10);
d += t * pow(n, len-i-1);
}
for (i=0; d!=0; ++i) {
t = d % m;
a[i] = (t<10)?(t+'0'):(t-10+'A');
d /= m;
}
for (--i; i>=0; --i)
cout << a[i];
cout << endl;
return 0;
}