题目地址:
https://www.luogu.com.cn/problem/P1143
题目描述:
请你编一程序实现两种不同进制之间的数据转换。
输入格式:
共三行,第一行是一个正整数,表示需要转换的数的进制
n
(
2
≤
n
≤
16
)
n(2≤n≤16)
n(2≤n≤16),第二行是一个
n
n
n进制数,若
n
>
10
n>10
n>10则用大写字母
A
∼
F
A\sim F
A∼F表示数码
10
∼
15
10\sim 15
10∼15,并且该
n
n
n进制数对应的十进制的值不超过
1000000000
1000000000
1000000000,第三行也是一个正整数,表示转换之后的数的进制
m
(
2
≤
m
≤
16
)
m(2≤m≤16)
m(2≤m≤16)。
输出格式:
一个正整数,表示转换之后的
m
m
m进制数。
进制转换。代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
int main() {
string s;
long x = 0;
cin >> n >> s >> m;
for (int i = 0; i < s.size(); i++) {
x *= n;
if (isdigit(s[i])) x += s[i] - '0';
else x += s[i] - 'A' + 10;
}
s.clear();
while (x) {
int c = x % m;
if (c >= 10) s += 'A' + c - 10;
else s += to_string(c);
x /= m;
}
if (!s.size()) puts("0");
reverse(s.begin(), s.end());
cout << s << endl;
return 0;
}
时空复杂度 O ( log n x + log m x ) O(\log_n x+\log_m x) O(lognx+logmx), x x x是要被转化的数。