ProjectEuler - 返回 0 的最大回文积
ProjectEuler - Largest Palindrome Product returning 0
出于某种原因,以下代码在输出中产生了 0,我不知道为什么。
long i = 999;
long j = 999;
long pal = 0;
for(; i >= 100; i--) { //Practice: 99 * 99
for(; j >= 100; j--) {
long k = i * j; // 9801 999*999 ~= 999006
String normal = String.valueOf(k);//String(9801)
String palindrome = new StringBuffer(normal).reverse().toString();//String(1089)
if (normal.equals(palindrome)) { //False
if (Long.valueOf(normal) > pal) { //Is greater than
pal = Long.valueOf(normal); // pal =
}
}
}
}
System.out.println(pal);
是使用StringBuffer还是Strings的问题?当 for() 循环设置为 i > 0,而不是 i >= 100 时,它会 return 一个答案。
j
在i
达到100后不重置。将初始化移动到for
语句中,它所属的位置:
for(long i = 999; i >= 100; i--) {
for(long j = 999; j >= 100; j--) {
作为旁注,使用 Long.parseLong()
而不是 Long.valueOf()
以避免不必要的装箱和拆箱。
出于某种原因,以下代码在输出中产生了 0,我不知道为什么。
long i = 999;
long j = 999;
long pal = 0;
for(; i >= 100; i--) { //Practice: 99 * 99
for(; j >= 100; j--) {
long k = i * j; // 9801 999*999 ~= 999006
String normal = String.valueOf(k);//String(9801)
String palindrome = new StringBuffer(normal).reverse().toString();//String(1089)
if (normal.equals(palindrome)) { //False
if (Long.valueOf(normal) > pal) { //Is greater than
pal = Long.valueOf(normal); // pal =
}
}
}
}
System.out.println(pal);
是使用StringBuffer还是Strings的问题?当 for() 循环设置为 i > 0,而不是 i >= 100 时,它会 return 一个答案。
j
在i
达到100后不重置。将初始化移动到for
语句中,它所属的位置:
for(long i = 999; i >= 100; i--) {
for(long j = 999; j >= 100; j--) {
作为旁注,使用 Long.parseLong()
而不是 Long.valueOf()
以避免不必要的装箱和拆箱。