进制转换

n进制下的数s转换为m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>

using namespace std;

int fun1(char a) //字符转数字
{
if (a == 'A') return 10;
if (a == 'B') return 11;
if (a == 'C') return 12;
if (a == 'D') return 13;
if (a == 'E') return 14;
if(a=='F') return 15;
return int(a - '0');
}

char fun2(int a)
{
if (a == 10) return 'A';
if (a == 11) return 'B';
if (a == 12) return 'C';
if (a == 13) return 'D';
if (a == 14) return 'E';
if (a == 15) return 'F';
return char (a + '0');
}

int main()
{
long long n, m, p = 1, sum = 0; //p为当前位次(百位,千位,万位等。)
string s, res = "";

cin >> n >> s >> m; //前进制,数,后进制

//从低位到高位,将字符转换为数字
for (int i = s.size() - 1; i >= 0; i --)
{
sum += fun1(s[i]) * p ; //当前位等于转为为数字之后,乘上当前位次
p *= n; //更新位次
}
//因为可能存在16进制,将当前数转换为字符串输出
while (sum != 0)
{
res = fun2(sum % m) + res; //由低位向高位逐级求出,然后放入答案
sum /= m; //更新数字
}

cout << res << endl;

return 0;
}


进制转换
http://example.com/2023/04/05/杂类/进制转换/
作者
Feng Tao
发布于
2023年4月5日
更新于
2023年4月21日
许可协议