在2到16之间任意两个进制转换。
#include <iostream>
#include <map>
#include <string>
#include <cmath>
#include <stack>
using namespace std;
// ERROR
int main()
{
//cout<<pow(16,9)<<endl;
while(1)
{
string s;
cin>>s;
if(cin.eof()==1)
{
break;
}
int a,b;
cin>>a>>b;
/*
char str[100];
int a,b;
while(scanf("%s %d %d",str,&a,&b)!=EOF)
{
string s=str;*/
long long sum=0;
long long base=1;
for(int i=s.size()-1;i>=0;i--)
{
int t;
if(s[i]>='0'&&s[i]<='9')
{
t=s[i]-'0';
}else if(s[i]>='A'&&s[i]<='F')
{
t=s[i]-'A'+10;
}
sum=sum+base*t;
base=base*a;
}
//cout<<sum<<endl;
/*
if(sum>=pow(b,8))
{
cout<<" ERROR"<<endl;
continue;
}*/
stack<char> sta;
while(sum!=0)
{
int t=sum%b;
sum=sum/b;
if(t<10)
{
sta.push((char)(t+'0'));
//cout<<(char)(t+'0')<<endl;
}else
{
sta.push((char)(t-10+'A'));
//cout<<(char)(t+'A')<<endl;
}
}
if(sta.size()>7)
{
cout<<" ERROR"<<endl;
}else
{
for(int i=0;i<7-sta.size();i++)
{
cout<<" ";
}
while(sta.empty()!=1)
{
char t=sta.top();
cout<<t;
sta.pop();
}
cout<<endl;
}
}
return 0;
}