What is the greatest 6 digit palindrome number?

What is the greatest 6 digit palindrome number?

Mark M. answered • 11/25/17

Tutor

5.0 (253)

Mathematics Teacher - NCLB Highly Qualified

About this tutor ›

About this tutor ›

The first shall be 250052

from there to 2599952 there are 100.

The next is 2600062

from there to 2699962 there are 100.

The next is 2700072

from there to 2799972 there are 100.

 

Get the picture?

Upvote • 0 Downvote

Add comment

More

Report

You are not including rangeMin in either of the loops, so you will never test products which involve the lower limit. You want

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
0 in the loop condition:

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)

Commutativity

Note that

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
1, so you don't need to test all combinations in the range:

    for (int p = rangeMax; p > rangeMin; p--)
        for (int q = rangeMax; q > rangeMin; q--)

Only the ones where either

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
2 or
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
3, which will reduce your search space by close to 50%! For example, you could change the
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
4 range to start at the current
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
5 value and go down from there:

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)

Test order: Fastest tests first!

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
6 is an involved function which will take a bit of time. In comparison,
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
7 is blazingly fast. So instead of:

            if (isPal(P))
                if (P > maxP)
                {
                    maxp = p; maxq = q; maxP = P;
                }

how about:

            if (P > maxP)
                if (isPal(P))
                {
                    maxp = p; maxq = q; maxP = P;
                }

Early termination

If

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
8 is ever less than
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
9, then multiplying
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
5 by any smaller value of
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
4 is a waste of time; you can break out of the inner loop, and try the next value of
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
5.

If

    for (int p = rangeMax; p > rangeMin; p--)
        for (int q = rangeMax; q > rangeMin; q--)
3 is ever less than
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
9, and the inner loop only multiplies
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
5 by
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
4 values which a not greater than
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = rangeMax; q >= rangeMin; q--)
5, then you can break out of the outer loop, too!

String Manipulation

The following is inefficient, because temporary objects are being created and destroyed during each iteration.

    for (int i = numStr.length() - 1; i >= 0 ; --i)
        rNumStr += numStr.charAt(i);

It is much better to use a

    for (int p = rangeMax; p > rangeMin; p--)
        for (int q = rangeMax; q > rangeMin; q--)
8 to build up strings character by character, because the
    for (int p = rangeMax; p > rangeMin; p--)
        for (int q = rangeMax; q > rangeMin; q--)
8 maintains a mutable buffer for the interm results.

Even better, it includes the

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
0 method, which does what you need in one function call.

StringBuilder sb = new StringBuilder(numStr);
String rNumStr = sb.reverse().toString();

Unnecessary Operations

Why convert

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
1 to a number using
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
2? Isn't the result simply
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
3, the value that was passed in to the function?

Why convert

    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
4 to a number? If
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
3 is a palindrome, then aren't
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
1 and
    for (int p = rangeMax; p >= rangeMin; p--)
        for (int q = p; q >= rangeMin; q--)
4 equal?

How many 6 digit palindromes are there?

we have 10 possibilities for the 2nd and 3rd digit respectively and then we just have the repeat of digits in reversed order and thus they can be chosen in only 1 way. So, we have 4*10*10*1*1*1 = 400 different 6 digit even palindromes.

What is the largest palindrome number?

It can be shown that "7449447" is the largest palindromic integer that can be formed.

What is the maximum number of 6 letter palindrome?

The answer to your question is 17,576.

What is the 6 digit number greatest?

Answer: We know that the greatest 6 digit number is 999999.