Skip to content

Instantly share code, notes, and snippets.

@julius-datajunkie
Last active December 26, 2015 03:59
Show Gist options
  • Save julius-datajunkie/7089529 to your computer and use it in GitHub Desktop.
Save julius-datajunkie/7089529 to your computer and use it in GitHub Desktop.
import unittest
def LargestIntDividesEleven(numberOfDigits):
largestInt = 10**(numberOfDigits)-1
return largestInt - (largestInt % 11)
def reverse(number):
'''
This method does not speed things up, but it does provide a rather
interesting way of reversing any integers without converting it to
string first
'''
reversed = 0
while number > 0:
reversed = 10*reversed + number % 10
number = number/10
return reversed
def IsPalindrome(number):
if (reverse(number) == number):
return True
else:
return False
def FindLargestPalindromeProduct(numberOfDigits):
'''
Extremely Smart way of getting the solution!Kudo to those who come up with this
Start by assuming P = the largest palindrome and observe its properties.
'''
startInt = 10**(numberOfDigits-1)
endInt = 10**(numberOfDigits)-1
max = 0
i = endInt
while ( i >= startInt):
decrement = 1
if (i % 11 == 0):
j = i
else:
j = LargestIntDividesEleven(numberOfDigits)
decrement = 11
while ( j >= startInt):
number = i*j
if IsPalindrome(number):
if (max < number):
max = number
else:
break
j -= decrement
i -= 1
return max
if __name__ == '__main__':
unittest.main(exit=False)
print(FindLargestPalindromeProduct(3))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment