Code: Select all
#include<iostream>
using namespace std;
#include<list>
#include<cmath>
#include<map>
#include<cstring>
long toDecimal(char *s,int cur_base){
map<char,int>M;M['1']=1;M['2']=2;M['3']=3;M['4']=4;M['5']=5;M['6']=6;M['7']=7;M['8']=8;M['9']=9;M['0']=0;
M['A']=10;M['B']=11;M['C']=12;M['D']=13;M['E']=14;M['F']=15;
long ans=0;
int len=strlen(s)-1,power=0;
while(len>=0){
ans+=M[*(s+len)]*(int)pow((double)cur_base,(double)power++);
len--;
}
return ans;
}
void toBase( long dec,int b){
char str[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
list<char>L;
char jon[10001];
long ba=b,da=dec,inx=0;
while(dec){
int ses=dec%b;
long fol=dec/b;
L.push_front(str[ses]);
dec=fol;
}
list<char>::iterator p=L.begin();
while(p!=L.end()){
jon[inx++]=*p;
p++;
}
jon[inx]='\0';
char dd[]={"ERROR"};
if(inx>7)printf("%7s\n",dd);
else printf("%7s\n",jon);
}
int main(){
char s[10001];
int from,to;
while(cin>>s>>from>>to){
long dec;
if(s[0]=='0')printf(" 0\n");
else{
dec=toDecimal(s,from);
if(to==10)printf("%7ld\n",dec);
else toBase(dec,to);
}
}
return 0;
}