Code: Select all
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
char num1[50],num2[50];
long long value1,value2;
long long basevalue(char num[],int base)
{
int i,j,length;
long long value=0;
length=strlen(num);
for(i=length-1,j=0;i>=0;i--,j++)
{
if(isalpha(num[i]))
value=value+int(num[i]-55)*(long long)( pow(double(base),double(j)) );
else
value=value+int(num[i]-48)*(long long)(pow(double(base),double(j)));
}
return value;
}
int main()
{
int len1,len2,i,j,flag=0,high1,high2;
while( (scanf("%s %s",&num1,&num2))==2 )
{
len1=strlen(num1);
len2=strlen(num2);
high1=0;
high2=0;
if(num1[0]=='0' && num2[0]=='0')
{
printf("0 (base 2) = 0 (base 2)\n");
continue;
}
for(i=0;i<len1;i++)
{
if(isdigit(num1[i]))
{
if(high1<num1[i]-48)
high1=num1[i]-48;
}
else
{
if(num1[i]-55>high1)
high1=num1[i]-55;
}
}
for(i=0;i<len2;i++)
{
if(isdigit(num2[i]))
{
if(high2<num2[i]-48)
high2=num2[i]-48;
}
else
{
if(num2[i]-55>high2)
high2=num2[i]-55;
}
}
for(i=2;i<=36 && !flag;i++)
{
if(i<=high1)
continue;
value1=basevalue(num1,i);
for(j=2;j<=36;j++)
{
if(j<=high2 )
continue;
value2=basevalue(num2,j);
if(value1==value2){
flag=1;
break;
}
}
}
if(flag)
printf("%s (base %d) = %s (base %d)\n",num1,i-1,num2,j);
else
printf("%s is not eqal to %s in any base 2..36\n",num1,num2);
flag=0;
}
return 0;
}