java中最大的回文产品

时间:2015-03-16 20:21:40

标签: java

我为欧拉项目的第四个问题编写了一个代码。

问题是: 回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。

找出由两个3位数字的乘积制成的最大回文。

这是我的代码:

public class LargestPalindromeProduct {
private static int product;//integer palindrome number
private static String palindrome;//string palindrome

private static int largestPalindrome(){
    for(int i = 100; i<=999; i++){
        for(int k = 100; k<=999; k++){
            product = i*k;

            palindrome  = Integer.toString(product);

            for(int j = 0; j<= palindrome.length()-1; j++){
                if(palindrome.charAt(j) == palindrome.length() - 1 - j){
                    return product;
                }
            }
        }
    }
    return product;
}
public static void main(String[] args) {
    int largestPalindrome = largestPalindrome();
    System.out.println(largestPalindrome);
}

}

此代码以998001作为输出。 你能帮我找一下问题所在吗?

3 个答案:

答案 0 :(得分:1)

您在获得1场比赛时返回,而不是继续检查,直到所有比赛。

 if(palindrome.charAt(j) == palindrome.length() - 1 - j){
     return product;
 }

正如@soong指出实际比较正在进行charAt() vs length

更好地检查您的比较方式。

答案 1 :(得分:0)

我所做的是从999999开始并向下计数,然后测试该数字是否为回文,如果数字是回文,则测试它是否有2个整数因子。

我不会给你所有的代码,但这是检查你可能没有想过的回文的一种方法。

public static boolean isPalindrome(int palindrome) {
    StringBuilder builder = new StringBuilder(Integer.toString(palindrome));
    builder.reverse();
    return Integer.valueOf(builder.toString()) == palindrome;
}

答案 2 :(得分:0)

关闭,但要使您的模式生效,您必须尝试所有组合并返回最大的组合。另外,不要在不匹配时使方法短路,只要打破循环。

尝试一些类似于我添加的更改......

public class LargestPalindromeProduct {

private static int largestPalindrome() {
    int max = 0;
    for(int i = 100; i<=999; i++) {
            for(int k = 100; k<=999; k++) {
                int product = i*k;
                if (product <= max) {
                    continue;
                }
                String palindrome  = Integer.toString(product);
                boolean good = true;
                for(int j = 0; j<= palindrome.length()-1; j++) {
                    if(palindrome.charAt(j) != palindrome.charAt(palindrome.length() - 1 - j)) {
                        good = false;
                        break;
                    }
                }
                if (good)
                    max = product;
            }
        }
    }
    return max;
}
public static void main(String[] args) {
    int largestPalindrome = largestPalindrome();
    System.out.println(largestPalindrome);
}