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

Java代码问题:求解ProjectEuler第4题为何结果不正确?

你的代码问题分析

咱们直接拆解你代码里的核心问题:

  • 最关键的错误:没有保留最大的回文数
    你的逻辑是「只要找到回文数,就直接把finalSum替换成这个数」,完全没管这个新回文数是不是比之前的更大。比如,循环后期如果遇到一个较小的回文数(比如某个三位数乘积得到的10201之后,又碰到了9009),它会直接把finalSum改成更小的那个值,最后输出的是最后一个遍历到的回文数,而不是所有回文数里最大的那个。

  • 对比正确代码的逻辑
    网上的正确代码(其实它的写法有个小瑕疵,应该先判断是否是回文再比大小,但核心思路没问题):它先筛选出比当前记录的最大值更大的乘积,再判断这个乘积是不是回文——只有满足「更大+是回文」两个条件,才更新最大值,这样就能保证最后留下的是所有可能里最大的那个回文数。

修正你的代码的方法

只需要给你的判断条件加一个「当前回文数比finalSum大」的限制,就能解决问题:

public static long reverseNumber(long number){ 
    long reversed = 0; 
    while(number != 0) { 
        long digit = number % 10; 
        reversed = reversed * 10 + digit; 
        number /= 10; 
    } 
    return reversed; 
}

// 主逻辑部分
long sum, finalSum = 1, revSum; 
for (int i = 100; i < 1000; i++){ 
    for (int j = 100; j < 1000; j++){ 
        sum = i * j; 
        revSum = reverseNumber(sum); 
        // 关键修改:只有当前回文数比已记录的最大值大,才更新
        if (sum == revSum && sum > finalSum){ 
            finalSum = sum; 
        } 
    } 
}
System.out.println(finalSum);

另外给你提个小优化:可以让j从i开始循环(j = i; j < 1000; j++),因为i*j和j*i的结果完全一样,这样能减少一半的循环次数,提升代码效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:31