Product 由2个3位数的乘积生成的最大回文值 public静态布尔值isPal(int值) { String temp=String.valueOf(值); int begin=0; int end=(temp.length())-1; 中间整数=(开始+结束)/2; 对于(int count=begin;count=100&&num2>=100) { 如果(isPal(num1*num2)) { 最大数=num1*num2; 打破 } 其他的 { 如果(num1==num2-1) { num2--; } 其他的 { num1--; } } } 返回最大数量; }
当我运行它时,它返回回文698896,这是一个回文,但不是由两个3位数字的乘积生成的最高回文。最大回文方法中的else语句在这种样式中基本上是递减的,以保持检查最大数,因为998*998大于999*997,依此类推 999*999->检查: num1减量 998*999->检查: num2减量 998*998->检查Product 由2个3位数的乘积生成的最大回文值 public静态布尔值isPal(int值) { String temp=String.valueOf(值); int begin=0; int end=(temp.length())-1; 中间整数=(开始+结束)/2; 对于(int count=begin;count=100&&num2>=100) { 如果(isPal(num1*num2)) { 最大数=num1*num2; 打破 } 其他的 { 如果(num1==num2-1) { num2--; } 其他的 { num1--; } } } 返回最大数量; },product,palindrome,Product,Palindrome,当我运行它时,它返回回文698896,这是一个回文,但不是由两个3位数字的乘积生成的最高回文。最大回文方法中的else语句在这种样式中基本上是递减的,以保持检查最大数,因为998*998大于999*997,依此类推 999*999->检查: num1减量 998*999->检查: num2减量 998*998->检查 不幸的是,我无法找到正确的最高回文 递减逻辑永远不会检查num1和num2的差值超过1的值。例如,您永远不会检查999*997。您需要执行以下操作: public static b
不幸的是,我无法找到正确的最高回文 递减逻辑永远不会检查num1和num2的差值超过1的值。例如,您永远不会检查999*997。您需要执行以下操作:
public static boolean isPal(int value)
{
String temp = String.valueOf(value);
int begin=0;
int end=(temp.length())-1;
int middle=(begin+end)/2;
for(int count=begin; count<=middle; count++)
{
if(temp.charAt(count)!=temp.charAt(end))
{
return false;
}
else if(temp.charAt(count)==temp.charAt(end))
{
end--;
}
}
return true;
}
public static int largestPalindromeNumber()
{
int largestNumber=0;
int num1=999;
int num2=999;
while(num1>=100 && num2>=100)
{
if(isPal(num1*num2))
{
largestNumber=num1*num2;
break;
}
else
{
if(num1==num2-1)
{
num2--;
}
else
{
num1--;
}
}
}
return largestNumber;
}
实际上,对于num1的每一个值,找到形成苍白的最大num2。这是num1迭代中最大的palendrome。然后跟踪您找到的最棒的一个。这是在
Java
中,对吗?是的,很抱歉我没有添加我原谅的标记。您尝试使用System.out.println查看值在运行时的作用,以确保它是正确的?
int greatestPal = 0;
for(int num1 = 999; num1 > 99; num1--){
for(int num2 = 999; num2 > 99; num2--){
int product = num1 * num2;
if(isPal(product)){
greatestPal = Math.max(product, greatestPal);
break;
}
}
}