Java ProjectEuler-返回0的最大回文乘积
出于某种原因,下面的代码在输出中生成一个0,我不知道为什么Java ProjectEuler-返回0的最大回文乘积,java,palindrome,Java,Palindrome,出于某种原因,下面的代码在输出中生成一个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 =
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时,它会返回答案。j在i达到100后不会重置。将初始化移到for语句中,它所属的位置:
for(long i = 999; i >= 100; i--) {
for(long j = 999; j >= 100; j--) {
作为旁注,请使用Long.parseLong而不是Long.valueOf,以避免不必要的装箱和拆箱。您希望它打印什么?可能没有找到回文?不是很长。valueOfnormal不仅仅是k?@shmosel实际答案在900k范围内是正常的是k,我个人觉得更容易将其保留为stringAh,这很有意义。我想我是出于愚蠢的原因决定不做那件事的。谢谢没问题。如果这回答了你的问题,请。