Bir palindromik sayı sağdan ve soldan okunduğunda aynıdır. iki basamaklı sayıların çarpımı ile elde edilebilen en büyük palindormik sayı: 9009 = 91 × 99 dır.
3 basamaklıların çarpımı ile elde edilebilen en büyük palindromik sayı kaçtır?
Burada en büyük sayı sorulduğu için döngüyü tersten kurmak daha mantıklı olacaktır. en büyük 3 basamaklı sayı 999. Eğer 999’dan geriye doğru gidersek bulduğumuz ilk palindromik sayı sorunun cevabı olacaktır.
Python İle Çözüm
import string
from datetime import datetime
import math
def isPalindromic(n):
strn = str(n)
return strn == strn[::-1]
def main():
largestPalindrome=0
number = 0
for f in range(99,999,-1):
for n in range(99,999,-1):
number = n * f
if isPalindromic(number) and largestPalindrome<number:
largestPalindrome = number
print(largestPalindrome)
if __name__ == "__main__":
startTime = datetime.now()
main()
print(datetime.now()-startTime)
906609 00:00:00.000031
Not:
Python ile azalan döngü kurmak için range fonkisyonuna 3. parametre olarak -1 verilmelidir. Bu her turda 1 azalacak anlamnına gelir.
PHP İle Çözüm
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function isPalindrome($n){
return $n == strrev($n);
}
$startTime = microtime_float();
$largestPalindrome=0;
for($f=999; $f>=100; $f--){
for($n=999; $n>=100; $n--){
$number = $f*$n;
if(isPalindrome($number) && $largestPalindrome<$number){
$largestPalindrome = $number;
}
}
}
echo $largestPalindrome."\n";
$executionTime = microtime_float()- $startTime;
echo "Execution Time: ".$executionTime;
906609 Execution Time: 0.86828804016113