天呐,你是怎么做到把二进制的 `11111111` 转换成十六进制的 `1515` 的?(正确答案是 `FF`。)
by Zaoly @ 2024-04-04 00:43:47
@[Zaoly](/user/349869) 改正了~谢谢~
by wisdom2010 @ 2024-04-06 22:48:31
@[Zaoly](/user/349869)
```cpp
#include<bits/stdc++.h>
using namespace std;
int n;
string a;
/*
A B C D E F
10 11 12 13 14 15
*/
const int maxn = 100000 + 5;
int ans[maxn];
int sum = 0;
int j = 0;
int b[maxn];
int m;
int f(int j)
{
int mn = 1;
for(int i = 0; i < j; i++)
mn *= n;
return mn;
}
int main()
{
cin >> n;
cin >> a;
cin >> m;
int len = a.size();
for(int i = 0; i < len; i++)
{
if(a[i] == 'A')
ans[i] = 10;
else if(a[i] == 'B')
ans[i] = 11;
else if(a[i] == 'C')
ans[i] = 12;
else if(a[i] == 'D')
ans[i] = 13;
else if(a[i] == 'E')
ans[i] = 14;
else if(a[i] == 'F')
ans[i] = 15;
else
ans[i] = a[i] - '0';
}
for(int i = len - 1; i >= 0; i--)
{
sum += f(j) * ans[i];
j++;
}
int i = 0;
while(sum > 0)
{
b[i] = sum % m;
sum /= m;
i++;
}
while(i > 0)
{
i--;
if(b[i] == 10)
{
cout << "A";
continue;
}
else if(b[i] == 11)
{
cout << "B";
continue;
}
else if(b[i] == 12)
{
cout << "C";
continue;
}
else if(b[i] == 13)
{
cout << "D";
continue;
}
else if(b[i] == 14)
{
cout << "E";
continue;
}
else if(b[i] == 15)
{
cout << "F";
continue;
}
cout << b[i];
}
return 0;
}
```
by wisdom2010 @ 2024-04-06 22:49:01