Code: Select all
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
long long power(int base,long long p)
{
long long i=0,result=1;
for(; i<p; i++)
{
result*=base;
}
return result;
}
int char_to_int(char c)
{
return c-55;
}
int f1(int n)
{
return 55+n;
}
void f(long long number,int base2)
{
char string1[100000],string2[100000],error[10]={'E','R','R','O','R','\0'};
int i=0,j,k;
while(number!=0)
{
string1[i]=(number%base2)+'0';
//printf("%c\n",string1[i]);
if((number % base2) >9)
{
string1[i]=f1(number%base2);
}
i++;
number/=base2;
}
string1[i]='\0';
if(i>7)
printf("%7s\n",error);
else
{
i--;
j=0;
while(i>=0)
{
string2[j++]=string1[i--];
}
string2[j]='\0';
printf("%7s\n",string2);
}
}
long long base_convert(char s[],long long len,int base)
{
int i=0;
long long temp;
long long base2_number=0;
while(s[i]!='\0')
{
temp=s[i]-'0';
if(s[i]>='A' && s[i]<='Z')
temp=char_to_int(s[i]);
base2_number+=(temp * power(base,len));
len--;
i++;
}
return base2_number;
}
int main()
{
long long base1,base2,flag,base2_number,len,v,i;
char base1_number[100000];
while(scanf("%s %lld %lld",base1_number,&base1,&base2)==3)
{
i=0;
flag=0;
v=0;
if(base1_number[0]=='0')
printf("%7lld\n",v);
else
{
// while(base1_number[i]!='\0')
// {
// v=base1_number[i]-'0';
//
// if(base1_number[i]>='A' && base1_number[i]<='Z')
// v=char_to_int(base1_number[i]);
//
// i++;
//
// }
//if(!flag)
{
len=strlen(base1_number)-1;
base2_number=base_convert(base1_number,len,base1);
if(base2==10)
{
printf("%7lld\n",base2_number);
}
else
{
f(base2_number,base2);
}
}
}
}
return 0;
}