#include<stdio.h>
#define M 40
char digit[20]="0123456789ABCDEF";
int FindMinBase(char[]);
unsigned long ToDec(char[],int);
int DecTo(unsigned long,int,char[]);
int main()
{
int bx,by,l;
unsigned long dx;
char X[M],Y[M],Z[10000];
//freopen("in.txt","r",stdin);
while(gets(Z))
{
sscanf(Z,"%s%d%d",X,&bx,&by);
dx=ToDec(X,bx);
l=DecTo(dx,by,Y);
if(l>7)
printf("%7s\n","ERROR");
else
printf("%7s\n",Y);
}
return 0;
}
int FindMinBase(char A[])
{
int i,b,mb=2;
for(i=0;A[i];i++)
{
if(A[i]<65)
b=A[i]-47;
else
b=A[i]-54;
if(mb<b)mb=b;
}
return mb;
}
unsigned long ToDec(char A[],int b)
{
unsigned long dec=0,p=1;
int i,d,l;
for(l=0;A[l];l++);
for(i=l-1;i>=0;i--)
{
if(A[i]<65)
d=A[i]-48;
else
d=A[i]-55;
dec=dec+d*p;
p=p*b;
}
return dec;
}
int DecTo(unsigned long dec,int b,char num[])
{
int d,i,k=0;
if(!dec)
{
num[0]='0';
num[1]='\0';
return 1;
}
while(dec)
{
d=dec%b;
dec=dec/b;
num[k++]=digit[d];
}
d=k/2;
for(i=0;i<d;i++)
{
num[i]=num[i]^num[k-i-1];
num[k-i-1]=num[i]^num[k-i-1];
num[i]=num[i]^num[k-i-1];
}
num[k]='\0';
return k;
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.