#define LL long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define pri(a) cout << a << endl;
#define prii(a,b) cout << a << " " << b << endl;
using namespace std;
bool isoka(string s, int bp)
{
int tmp;
REP(i,SZ(s))
{
tmp = isdigit(s[i]) ? s[i] - '0' : s[i] - 55; //***
if(tmp >= bp) return 0; //*** Invalid Number of Any Base
}
return 1;
}
int main()
{
int bp, bt;
string s;
while(cin>>bp>>bt>>s)
{
if(!isoka(s,bp))
{
printf("%s is an illegal base %d number\n", s.c_str(), bp);
}
else
{
LL dec = strtoll(s.c_str(), NULL, bp); //*** String to Decimal Auto Convert
string tst = "";
while(dec)
{
tst += (dec%bt <= 9) ? dec%bt + '0' : dec%bt + 55; //*** Mod and Divide -- Dec2AnyBaseConvert
dec /= bt;
}
if(!SZ(tst)) tst += "0"; //***
reverse(ALL(tst));
printf("%s base %d = %s base %d\n", s.c_str(), bp, tst.c_str(), bt);
}
}
return 0;
}
No comments:
Post a Comment