Skip to content

Instantly share code, notes, and snippets.

@eroltutumlu
Last active August 29, 2015 14:15
Show Gist options
  • Save eroltutumlu/88a4e6d08fc02e7ddc7c to your computer and use it in GitHub Desktop.
Save eroltutumlu/88a4e6d08fc02e7ddc7c to your computer and use it in GitHub Desktop.
Lychrel number
/*
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