Code: Select all
#include <iostream>
using namespace std;
char lookup[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main(int argc, char *argv[])
{
unsigned long long f, t;
char num[256];
while (cin >> f >> t >> num) {
unsigned long long val = 0;
bool illegal = false;
bool hasNegative = num[0] == '-';
for (int i = hasNegative ? 1 : 0; num[i]; i++) {
unsigned long long dig = num[i];
if (dig < '0' || (dig > '9' && dig < 'A')) {
illegal = true;
break;
}
if (dig <= '9')
dig -= '0';
else
dig = (dig & 31) + 9;
if (dig >= f) {
illegal = true;
break;
}
val = val * f + dig;
}
if (!val && hasNegative)
hasNegative = false;
if (illegal) {
cout << num << " is an illegal base " << f << " number" << endl;
} else {
cout << num << " base " << f << " = ";
char d[512];
char *x = d+512;
*--x = 0;
do
{
*--x = lookup[val % t];
val /= t;
} while (val);
if (hasNegative)
*--x = '-';
cout << x << " base " << t << endl;
}
}
return 0;
}