Last active
August 29, 2015 14:15
-
-
Save eroltutumlu/88a4e6d08fc02e7ddc7c to your computer and use it in GitHub Desktop.
Lychrel number
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
NOT: Algoritma doğru fakat Big Integer sınıfı kullanılmadığı için değer aşımı var . | |
https://projecteuler.net/problem=55 | |
Eğer 47 sayısını alır ters çevirir ve toplarsak 47+74 = 121 sayısını elde ederiz ki bu sayı palindromik bir sayıdır(sağdan ve soldan yazıldığında aynı). | |
Fakat her sayı bu kadar kolay palindrom üretmez. Örneğin: | |
349 + 943 = 1292 | |
1292 + 2921 = 4213 | |
4213 + 3124 = 7337 | |
349 sayısının palindrome olması 3 öteleme gerektirdi. | |
Bazı sayılar, henüz kimse kanıtlamadı, asla palindrom sayı üretmezler, 196 gibi. Bu sayılara Lychrel sayıları denir. Biz burada kanıtlanmadığı için en fazla 50 ötelemeye kadar olup olmadığına bakacağız. Eğer 50 ötelemeye kadar bir palindrom üretmediyse Lychrel sayısıdır diyeceğiz. Fakat 50 ötelemenin sonrasında da palindrome olan sayılar var, misal 4668731596684224866951378664 (53 öteleme, 28 basamaklı). | |
Soru: 10.000’in altında kaç Lychrel sayısı vardır? | |
*/ | |
public class Example { | |
public static void main(String[] args) { | |
final long MAX_NUMBER = 10000; | |
long Counter = 0; | |
long sum = 0; | |
final int iteration = 50; | |
long j,i; | |
for(i = 0; i < MAX_NUMBER; ++i) | |
{ | |
sum = i; | |
for(j = 0; j < iteration; ++j) | |
{ | |
sum = sum+reverse(sum); | |
if(isPalindrome(sum)) | |
break; | |
} | |
if(j == 50) | |
Counter++; | |
} | |
System.out.println(Counter); | |
} | |
private static long reverse(long number) | |
{ | |
long remainder; | |
long reversed = 0; | |
while(number!=0) | |
{ | |
remainder = number % 10; | |
reversed = reversed*10 + remainder; | |
number /= 10; | |
} | |
return reversed; | |
} | |
private static boolean isPalindrome(long number) | |
{ | |
if(number == reverse(number)) | |
return true; | |
return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment