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;
}
当我运行它时,它返回回文698896,这是一个回文,但不是由两个3位数字的乘积制成的最高回文。 maximumPalindrome方法中的else语句基本上以此样式递减,以便维持检查最高数字,因为998 * 998大于999 * 997,依此类推。
999 * 999 - &gt;校验: num1减量
998 * 999 - &gt;校验: num2减量
998 * 998 - &gt;检查
不幸的是,我无法找到正确的最高回文。
答案 0 :(得分:0)
您的减量逻辑永远不会检查num1和num2的值相差超过1的值。例如,您永远不会检查999 * 997。您需要执行以下操作:
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;
}
}
}
实际上,对于num1的每个值,找到形成古氏症的最大num2。对于num1的迭代,这是最大的古生菌综合症。然后跟踪你发现的最伟大的一个。