You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ProjectEuler最大回文乘积问题:Java代码输出0求助

问题分析与修复

嘿,我一眼就揪出代码里的关键问题啦,这也是很多新手容易踩的循环陷阱!

核心问题:内层循环变量未重置

你只在代码开头初始化了j = 999,但外层循环每一次i递减时,j并没有被重新设回999。第一次外层循环(i=999)执行完后,j已经变成了99,之后所有i的循环里,内层循环的条件j >= 100都不满足,直接跳过——这就导致程序只检查了i=999时的乘积,没覆盖到其他三位数的组合,最终pal一直是初始值0。

次要优化:冗余的类型转换

你已经通过k = i*j得到了乘积的数值,没必要把字符串normal再转成Long来比较,直接用k > pal就可以,既简洁又避免额外的类型转换开销。

修正后的代码

public class LargestPalindromeProduct {
    public static void main(String[] args) {
        long i = 999;
        long pal = 0;
        for (; i >= 100; i--) {
            // 每次外层循环都重置j为999,确保内层循环能完整执行
            long j = 999;
            for (; j >= 100; j--) {
                long k = i * j;
                String normal = String.valueOf(k);
                String palindrome = new StringBuffer(normal).reverse().toString();
                if (normal.equals(palindrome)) {
                    if (k > pal) {
                        pal = k;
                    }
                }
            }
        }
        System.out.println(pal);
    }
}

额外小建议

其实判断回文数可以不用转字符串,用数值反转的方式效率更高,比如:

private static boolean isPalindrome(long num) {
    long original = num;
    long reversed = 0;
    while (num > 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }
    return original == reversed;
}

把这段逻辑替换掉字符串反转的部分,程序运行速度会更快哦~

内容的提问来源于stack exchange,提问作者RA3236

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:50:20