Java 由两个3位数字的乘积构成的最大回文&引用;爪哇语;

Java 由两个3位数字的乘积构成的最大回文&引用;爪哇语;,java,Java,我知道以前有人问过这个问题,但我不喜欢任何答案。它们看起来都比需要的复杂。我更喜欢让事情尽可能简单 我写了我的代码,从我看到没有理由它不工作?我遗漏了什么吗?我没有得到一个错误,但我没有得到任何结果 公共类最大回文乘积{ public static void main(String[] args) { // A palindromic number reads the same both ways. The largest palindrome // made from the

我知道以前有人问过这个问题,但我不喜欢任何答案。它们看起来都比需要的复杂。我更喜欢让事情尽可能简单

我写了我的代码,从我看到没有理由它不工作?我遗漏了什么吗?我没有得到一个错误,但我没有得到任何结果

公共类最大回文乘积{

public static void main(String[] args) {

    // A palindromic number reads the same both ways. The largest palindrome
    // made from the product of two 2-digit numbers is 9009 = 91 × 99.
    //
    // Find the largest palindrome made from the product of two 3-digit
    // numbers.

    long product;
    for (int i = 999; i >= 100; i--) {
        for (int j = 999; i >= 100; i--) {
            product = j * i;
            if (reverse(product)) {
                System.out.println(product);
                break;
            }
        }
    }
}


private static final boolean reverse(long value) {
    long result = 0;
    while (value != 0) {
        result *= 10;
        result += value % 10;
        value /= 10;
    }
    return (result == value);
  }
}

你的内部循环有一个相当大的错误

for (int j = 999; i >= 100; i--) {
应该是

for (int j = 999; j >= 100; j--) {
自从

它们看起来都比需要的复杂。我更喜欢让事情尽可能简单

让我们重写
反向

private static final boolean reverse(long value) {
    String str = String.valueOf(value);
    return str.equals(new StringBuilder(str).reverse().toString());
}
最后,您只是在中断内部循环。请使用
System.exit
或标记为
break
的方法

outer: for (int i = 999; i >= 100; i--) {
    for (int j = 999; j >= 100; j--) {
        long product = j * i;
        if (reverse(product)) {
            System.out.printf("%d * %d = %d%n", i, j, product);
            break outer;
        }
    }
}

您的算法中有一个逻辑错误。假设
reverse(product)
为真,那么您的回文乘积最大,因为这两个循环从999下降到100。这不一定正确。例如,假设您的程序找到的第一个回文是(i=999)*(j=3)。结果是2997(这不是回文,但假设是)。你怎么能确定没有更大的回文,例如i=998和j=997?

谢谢。我不敢相信我错过了for循环中的错误。在我决定发布之前,我查看了很长时间。循环不会同时迭代。开始时,外部循环
i
的值固定为999,而内部循环
j
从999变为100。因此,程序将在到达案例(i==998和j==997)之前到达案例(i==999和j==3)是有意义的。我将添加一个maxNum变量并去掉中断符。if(reverse(product)&&product>max)max=product;