Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.math.BigInteger;
- import java.util.HashMap;
- import java.util.Map;
- public class Problem55 {
- public static void main(String[] args) {
- int count = 0;
- for (int i = 0; i < 10000; i++) {
- if (isLychrel(new BigInteger(String.valueOf(i)), 0)) {
- count++;
- }
- }
- System.out.println(count);
- }
- private static Map<BigInteger, Boolean> producesPalindromes = new HashMap<BigInteger, Boolean>();
- private static boolean isLychrel(BigInteger number, int itt) {
- if (itt != 0 && isPalindrome(number)) {
- return false;
- }
- if (itt == 50) {
- return true;
- }
- Boolean ret = producesPalindromes.get(number);
- if (itt != 0 && ret != null) {
- return !ret;
- }else{
- BigInteger nextNumber = getNext(number);
- boolean result = isLychrel(nextNumber, itt + 1);
- producesPalindromes.put(nextNumber, !result);
- return result;
- }
- }
- private static BigInteger getNext(BigInteger number) {
- String str = String.valueOf(number);
- String reversed = new StringBuilder(str).reverse().toString();
- return new BigInteger(reversed).add(number);
- }
- private static boolean isPalindrome(BigInteger number) {
- String str = number.toString();
- for (int i = 0; i < str.length() / 2; i++) {
- if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
- return false;
- }
- }
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement