Number have different representations depending on the bases on which they are expressed. For example in base 3, the number 12 is written as 110 , but in base 8 it is written as
![]()
Consider, for example, the integers 12 and 5. Certainly these ar not equal if base 10 is used for each, but suppose 12 was a base 3 number and 5 was a base 6 number then what happens.
12 base 3 = 1 x 31 + 2 x 30, or 5 was base 10(5 in any base is equal to 5 base 10).
So 12 and 5 can be equal if you select the right bases for each of them/
Write a program to input two integers, X and Y and calculated the smallest base for X and smallest base for Y (likely different from X) so that X and Y represent the same value. The base associated with X and Y will be between 1 and 20 (both inclusive), in representing these numbers the digits 0 to 9 have their usual decimal interpretations. The uppercase alphabetic characters A through J represent digits 10 through 19 respectively.
Test your program for the following data and some random data:
| INPUT : | |
| X = 12, Y = 5 | |
| OUTPUT: | |
| 12(base 3) = 5(base 6) | |
| INPUT : | |
| X = 10, Y = A | |
| OUTPUT: | |
| 10(base 10) = A(base 11) | |
| INPUT : | |
| X = 123, Y = 456 | |
| OUTPUT: | |
| 123 is not equal to 456 in any base between 2 to 20 | |
| INPUT : | |
| X = 42, Y = 36 | |
| OUTPUT: | |
| 42(base 7) = 36(base 8) |
import java.util.*;
public class Base_Equality
{
String dg = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int base2dec(String n, int b)
{
int i, l = n.length(), d=0, x, c=0;
for(i = l-1; i>=0; i--)
{ //Converting the number to decimal from base b
x = dg.indexOf(n.charAt(i));
if(b<=x) //If any digit is greater than or equal to the base then the number cannot be from that base
return -1;
d = d + x*(int)Math.pow(b, c);
c++;
}
return d;
}
void check(String a, String b)
{
int i, j, m, n;
for(i=2;i<=20;i++)
{
m = base2dec(a, i);
if(m==-1) //Skipping the loop
continue;
for(j=2;j<=20;j++)
{
n = base2dec(b, j);
if(n==-1) //Skipping the loop
continue;
if(m == n)
{
System.out.println(a+" in base "+i+" and "+b+" in base "+j+" are equal");
System.exit(0);
}
}
}
System.out.println(a+" is not equal to "+b+" in any base between 2 to 20");
}
public static void main()
{
Scanner sc = new Scanner(System.in);
String a, b;
Base_Equality ob = new Base_Equality();
System.out.println("Enter 2 numbers: ");
a = sc.nextLine(); //Taking input
b = sc.nextLine();
ob.check(a, b); //Calling the function
}
}
Output 1

Output 2