- gf24240 的博客
《梦溪笔谈·C++》卷一:进制转化——a进制转b进制
- 2025-3-22 19:30:03 @
思路:先把a进制转成10进制,再把10进制转成b进制
#include <iostream>
using namespace std;
int num(char ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
else if (ch >= 'A' && ch <= 'Z')
return (ch - 'A' + 10);
else
return (ch - 'a' + 10);
}
long long tod(int k, string n)
{
long long w = 0,p = 1;
for (int i = n.size() - 1; i >= 0; i--)
{
w += num(n[i]) * p;
p *= k;
}
return w;
}
void atob(string m,int one,int two)
{
int a[10005],k = 0;
long long n = tod(one,m);
while (n)
{
a[++k] = n % two;
n /= two;
}
for (int i = k; i >= 1; i--)
{
if (a[i] < 10)
cout << a[i];
else
cout << char(a[i] - 10 + 'A');
}
}
int main()
{
int one,two;
string m;
while (cin >> one >> m >> two)
{
if (m == "0")
{
cout << 0 << endl;
continue;
}
atob(m,one,two);
cout << endl;
}
return 0;
}