gpt4 book ai didi

Java:回文,没有得到最大的数字

转载 作者:行者123 更新时间:2023-11-30 08:04:27 26 4
gpt4 key购买 nike

我想求出3位数字中最大的回文数。这是我的代码:

for (int start = 100; start < 1000; start++) {
for (int start2 = 100; start2 < 1000; start2++) {
int temp = start * start2;
int biggest = 1;
String strTemp = temp + "";

if (strTemp.equals(new StringBuilder(strTemp).reverse().toString())) {
if (temp > biggest) {
biggest = temp;
System.out.println("Original: " + strTemp);
System.out.println("Reverse: " + new StringBuilder(strTemp).reverse().toString());
System.out.println("Siffra: " + start);
System.out.println("Siffra2: " + start2);
}

}
}

最后,我得到了 995 x 583 而不是 993 x 913,后者是最大的。为什么?我有它,所以最大的整数总是选择最大的数字。

最佳答案

您需要将 int biggest = 1; 移出两个 for 循环。如果您不在每个内部循环中都这样做,您将重新启动最大的值。

int biggest = 1;
for (int start = 100; start < 1000; start++) {
for (int start2 = 100; start2 < 1000; start2++) {
int temp = start * start2;

String strTemp = temp + "";

if (strTemp.equals(new StringBuilder(strTemp).reverse().toString())) {
if (temp > biggest) {
biggest = temp;
System.out.println("Original: " + strTemp);
System.out.println("Reverse: " + new StringBuilder(strTemp).reverse().toString());
System.out.println("Siffra: " + start);
System.out.println("Siffra2: " + start2);
}

}
}

使用 java 8,您可以按如下方式重写此代码:

    // Define what it means palindrome
IntPredicate isPalindrome = n -> new StringBuffer(String.valueOf(n)).reverse().toString().equals(String.valueOf(n));


OptionalInt max =
// Define a stream from 100 to 1000
IntStream.range(100, 1000)
// Map the original stream to a new stream
// Basically for each x of the first stream
// creates a new stream 100-1000 and map each element
// x of the first stream and y of the second stream
// to x * y
.flatMap(x -> IntStream.range(100, 1000).map(y -> x * y))
// Take only palyndrome of x * y
.filter(isPalindrome)
// take the max
.max();

函数式方法在大多数情况下更具可读性,您必须遍历 n 个元素并且更容易过滤和提取元素而不用做错了。

关于Java:回文,没有得到最大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35650155/

26 4 0