#include <iostream>
#include <ctime>

bool IsPalindrome( int n )
{
  int nCpy = n;         // Copy of n
  unsigned long r = 0;  // n reverse

  while( nCpy > 0 )
  {
    r = r * 10 + nCpy % 10;
    nCpy /= 10;
  }

  return n == r;
}

int main( int argc, char* argv[] )
{
  unsigned long largest = 0;  // Largest palindrome
  unsigned int i, j;          // Loop counters
  unsigned long p;            // Product of i and j
  int first, second;          // Factors
  clock_t t = clock();        // Timer

  for( i=100; i < 1000; ++i )
  {
    for( j=100; j < 1000; ++j )
    {
      p = i * j;
      if( IsPalindrome( p ) )
      {
        if( p > largest )
        {
          largest = p;
          first   = i;
          second  = j;
        }
      }
    }
  }

  t = clock() - t;
  std::cout << "The largest palindrome is " << largest;
  std::cout << " (" << first << " x " << second << ")\n";
  std::cout << "Time taken: " << static_cast<float>( t ) / CLOCKS_PER_SEC << " seconds\n";

  return 0;
}