我意识到之前已经问过这个问题,但我并不喜欢任何答案。他们看起来都比较复杂。我更喜欢让事情变得尽可能简单。
我编写了我的代码,从我看到它没有理由不起作用?我错过了什么吗?我没有收到任何错误,但我没有得到任何结果。
公共类LargestPalindromeProduct {
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);
}
}
答案 0 :(得分:3)
你的内循环中有一个相当大的错误,
for (int j = 999; i >= 100; i--) {
应该是
for (int j = 999; j >= 100; j--) {
从那以后
他们看起来都比较复杂然后需要。我更喜欢让事情变得尽可能简单。
让我们重写reverse
;
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;
}
}
}
答案 1 :(得分:1)
您的算法存在逻辑错误。您认为当reverse(product)
为真时,您就拥有了LargestPalindromProduct,假设两个循环从999降到100.这不是必需的。例如,假设您的程序找到的第一个回文是(i = 999)*(j = 3)。结果是2997(这不是回文,但假设它是)。你怎么能确定没有更大的回文,例如i = 998和j = 997?