The Problem:
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99.
Find the largest palindrome made from the product of two 3-digit numbers.
My solution (in C++):
// Author: Will Clausen // // Date: Jan 7, 2013 // // This program will solve Problem 4 of Project // Euler // INCLUDES #include <cstddef> #include <cmath> #include <set> #include <iostream> #include <sstream> // For converting numbers to strings. using namespace std; // DECLARATIONS (could be put in a header, but there's only 2 // so I'll spare myself the trouble). size_t problem4(size_t numDigits); bool isPalindrome(size_t Num); // IMPLEMENTATIONS // This function will return the largest palindromic number that is the product // of two numbers with numDigits digits. size_t problem4(size_t numDigits) { size_t startingNum = pow(10, numDigits-1); size_t endingNum = pow(10, numDigits); size_t nextNum; size_t largestPalindrome = startingNum; // Generate all palindromes and add them to a set. for (size_t x = startingNum; x < endingNum; ++x) { for (size_t y = startingNum; y < endingNum; ++y) { nextNum = x*y; if (isPalindrome(nextNum)) { if (nextNum > largestPalindrome) { largestPalindrome = nextNum; } } } } return largestPalindrome; } // Helper function to determine if a number is a palindromic number bool isPalindrome(size_t Num) { // Convert the number to a string string Number; stringstream convert; convert << Num; Number = convert.str(); size_t NumLen = Number.length(); // Check the string for (size_t i = 0; i < NumLen/2; ++i) { if (Number[i] != Number[NumLen - 1 - i]) return false; } return true; } // Solution: 906609
Comment if you know a way to think about this problem that leads to a faster solution. In particular, I wonder if there’s a faster way to generate possible numbers than brute-force search.