# If you add 9 and 9 you get 18

If you add 9 and 9 you get 18, and if you multiply 9 by 9 you get 81 (the reverse of 18). There are 2 more pairs of numbers with the same characteristics and where the result is two-digit:
24 + 3 = 27 and 24 * 3 = 72
and
47 + 2 = 49 and 47 * 2 = 94

But there is only one pair of numbers with a triple-digit result and its reversion.

What are the 2 numbers?

Hurkyl
Staff Emeritus
Gold Member
Is it fair game to exhaust these via computer?

seeing as there isn't a solution under a million.... im assuming you can use a computer

update: arg.. it's too big for QBASIC....

Last edited:
hypnagogue
Staff Emeritus
Gold Member
Hurkyl, you've used a computer to get a brain teaser in the past... and I think brum has a point insofar as there's not really an analytic solution to the problem (heuristics maybe, but even those basically boil down to trying out a very large set of computations to see if you can stumble on the right answer).

Anyway, I have the solution from a Matlab program I wrote but after your post I decided to wait on Greg's input into this. In the future I think it should be more explicit what resources are and are not allowed in general (eg I would think google is a no-no for any of these) and in particular cases (eg the acceptability of the use of a computer program for a question like this one).

Hurkyl
Staff Emeritus
Gold Member
Yah, I did on a previous one, but it didn't dawn on me until just now that it might not be in the spirit of the competition.

hmmm... well I suppose use a computer, except if it's a program especially for that calculation.

dduardo
Staff Emeritus
I too have come up with an answer. Instead of matlab, I used c++.

So is that a yes for a program. Its my own code. See below:

#include <iostream>
#include <sstream>
#include <string>

using namespace std ;

bool reverse_equal( int x , int y )
{
string s1 , s1_flip = "" , s2 ;
ostringstream s1_stream , s2_stream ;
int xy_flip ;
s1_stream << x+y ;
s2_stream << x*y ;
s1 = s1_stream.str() ;
s2 = s2_stream.str() ;
for( int z = s1.length() - 1; z >= 0 ; z-- )
s1_flip += s1[z] ;
if( s1_flip == s2 ) return true ;
else return false ;
}

int main( void )
{
for( int x = 1; x < 1000 ; x++ )
{
for( int y = 1; y < 500 ; y++ )
{
if( reverse_equal( x , y ) )
{
cout << "X: " << x << endl ;
cout << "Y: " << y << endl ;
cout << "X+Y: " << x+y << endl ;
cout << "X*Y: " << x*y << endl << endl ;
}
}
} }