ProjectEuler - 返回 0 的最大回文积

ProjectEuler - Largest Palindrome Product returning 0

出于某种原因,以下代码在输出中产生了 0,我不知道为什么。

    long i = 999;
    long j = 999;
    long pal = 0;
    for(; i >= 100; i--) { //Practice: 99 * 99
        for(; j >= 100; j--) {
            long k = i * j; // 9801 999*999 ~= 999006
            String normal = String.valueOf(k);//String(9801)
            String palindrome = new StringBuffer(normal).reverse().toString();//String(1089)
            if (normal.equals(palindrome)) { //False
                if (Long.valueOf(normal) > pal) { //Is greater than
                    pal = Long.valueOf(normal); // pal =
                }
            }
        }
    }
    System.out.println(pal);

是使用StringBuffer还是Strings的问题?当 for() 循环设置为 i > 0,而不是 i >= 100 时,它会 return 一个答案。

ji达到100后不重置。将初始化移动到for语句中,它所属的位置:

for(long i = 999; i >= 100; i--) {
    for(long j = 999; j >= 100; j--) {

Now it prints 906609.

作为旁注,使用 Long.parseLong() 而不是 Long.valueOf() 以避免不必要的装箱和拆箱。