Wednesday, November 10, 2010

[math && computing] // JAVA: 4 & 9 Times the Inversion of an Integer


I was working on this problem from The USSR Olympiad Problem Book:
Pg. 12, Q. 24 (b):
We say on integer is the "inversion" of another if it consists of the same digits written in reverse order. Find all integers whose inversions are four or nine times the original number.
Instead of trying to solve this problem algebraically by trying to figure out the mathematical relationship between a number an its inversion, I decided instead to do a little JAVA programming because I remembered that you can call up an inbuilt method to reverse a string. The program converts the integer to a String, reverses the String then converts that string back to an integer. Then the inversion is compared to both 4 times and 9 times the original integer to see if they are double equal! I could only check numbers and their inverses up to 99,999,999 because I didn't want to wait any longer than the 52 seconds it took my computer to do those numbers... I shall have to think about some ways to make the program more efficient :D

Here's the code:
public class InverseInt
{
public static void main (String[] args)
{
System.out.println ("Running Java Script File: InverseInt");
int number = 100;
String numToString = "" + number;
String stringInverse = new StringBuffer(numToString).reverse().toString();
int numInverse = Integer.parseInt(stringInverse.trim());
for (number = 100; number <= 99999999; number++) 
//System.out.print(number + " "); 
numToString = "" + number; 
stringInverse = new StringBuffer(numToString).reverse().toString(); 
numInverse = Integer.parseInt(stringInverse.trim()); 
if (numInverse == (4 * number)) 
System.out.println("number: " + number); 
System.out.println("numInverse: " + numInverse); 
System.out.println("SUCCESS! 4 * " + number + " = " + numInverse); 
else 
//System.out.print("X "); 
if (numInverse == (9 * number)) 
System.out.println("number: " + number); 
System.out.println("numInverse: " + numInverse); 
System.out.println("SUCCESS! 9 * " + number + " = " + numInverse); 
else 
//System.out.println("X "); 
}

Here's the output:
run:
Running Java Script File: InverseInt
number: 1089
numInverse: 9801
SUCCESS! 9 * 1089 = 9801
number: 2178
numInverse: 8712
SUCCESS! 4 * 2178 = 8712
number: 10989
numInverse: 98901
SUCCESS! 9 * 10989 = 98901
number: 21978
numInverse: 87912
SUCCESS! 4 * 21978 = 87912
number: 109989
numInverse: 989901
SUCCESS! 9 * 109989 = 989901
number: 219978
numInverse: 879912
SUCCESS! 4 * 219978 = 879912
number: 1099989
numInverse: 9899901
SUCCESS! 9 * 1099989 = 9899901
number: 2199978
numInverse: 8799912
SUCCESS! 4 * 2199978 = 8799912
number: 10891089
numInverse: 98019801
SUCCESS! 9 * 10891089 = 98019801
number: 10999989
numInverse: 98999901
SUCCESS! 9 * 10999989 = 98999901
number: 21782178
numInverse: 87128712
SUCCESS! 4 * 21782178 = 87128712
number: 21999978
numInverse: 87999912
SUCCESS! 4 * 21999978 = 87999912
BUILD SUCCESSFUL (total time: 52 seconds)

No comments:

Post a Comment