最大Palindrome值由2个3位数字的乘积组成

时间:2015-03-28 19:48:03

标签: product palindrome

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;检查

不幸的是,我无法找到正确的最高回文。

1 个答案:

答案 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的迭代,这是最大的古生菌综合症。然后跟踪你发现的最伟大的一个。