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