Perplexed palindromic product problems

I am learning Ruby, so it seemed to me that I would try to use some of the mysteries of the Euler project. Vaguely, I just did it to problem 4 ...

Task 4 is as follows:

The palindromic number reads the same in both directions. The largest palindrome from the product of two two-digit numbers of the number 9009 = 91 Γ— 99.

Find the largest palindrome of the product of two three-digit numbers.

So, I decided that I would loop from 999 to 100 in a nested loop and run a test for the palindrome, and then break out of the loops when I find the first (which should be the largest):

final=nil
range = 100...1000
for a in range.to_a.reverse do
  for b in range.to_a.reverse do
    c=a*b
    final=c if c.to_s == c.to_s.reverse
    break if !final.nil?
  end
  break if !final.nil?
end
puts final

580085, , -, . , 9009, , 10... 100.

  • - , ?
  • , ?

+5
13

999 * (999... 100), 998 * (999... 100)

, 999 * 500, 997 * 996.

, ?

, , a * b == b * a, b 999... 0 , ... 0.

, ( )

, (a + b) , , a. a /2, , , , , , .

+8

, a 999 b 200, , , 998 * 997 ( ).

, , b a.

+5

, , , . , , , "" Ruby :

  • ,
    • select , ,
      • ,

, , Ruby.

+3

P - x, y z. P 6 , 111111 = 143 Γ— 777 - . P :

P=100000x + 10000y + 1000z + 100z + 10y + x
P=100001x + 10010y + 1100z
P=11(9091x + 910y + 100z)

11 , a b 11. a 11, , b . , , b a.

+3

#:

using System;

namespace HighestPalindrome
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, j;
            int m = 1;
            bool flag = false;

            while (true)
            {
                if (flag) j = m + 1;
                else j = m;

                for (i = m; i > 0; i--)
                {
                    Console.WriteLine("{0} * {1} = {2}", 1000 - i, 1000 - j, (1000 - i) * (1000 - j));
                    j++;

                    //--- Palindrome Check ------------------------------

                    int number, temp, remainder, sum = 0;
                    number = temp = (1000 - i) * (1000 - j);

                    while (number > 0)
                    {
                        remainder = number % 10;
                        number /= 10;
                        sum = sum * 10 + remainder;
                    }

                    if (sum == temp)
                    {
                        Console.WriteLine("Highest Palindrome Number is - {0} * {1} = {2}", 1000 - i, 1000 - j, temp);
                        Console.ReadKey();
                        return;
                    }

                    //---------------------------------------------------
                }

                if (flag)
                    m++;
                flag = !flag;
            }

        }
    }
}
+2

, , palindrom a, , . , max_product .

+1

: , , . , a * b , c * d, c > a > b.

+1

, , .

, A, B, C, D, E. E * A D * C.

+1
ar=[]
limit = 100..999
for a in limit.to_a.reverse do
  for b in (100..a).to_a.reverse do
    c=a*b
    if c.to_s == c.to_s.reverse
      palndrm=c 
      ar << palndrm
    end  
  end
end
print ar
print"\n"
puts ar.max
puts ar.min 
+1

:

max = 100.upto(999).inject([-1,0,0]) do |m, a|
  a.upto(999) do |b|
    prod = a * b
    m = [prod, a, b] if prod.to_s == prod.to_s.reverse and prod > m[0]
  end
  m
end
puts "%d = %d * %d" % max

906609 = 913 * 993

0

- . , , , . - " ".

, , - , a ( ab == ba). , .

alt text

for a in range.to_a.reverse do
    for b in (100..a).to_a.reverse do

, , , .

c = a*b
next if c < best

, , , . , , , . , .

for a in range.to_a do
    for b in (100..a).to_a do

, 405K . -. ? 999 * 999 = 998001, - 100 * 100 = 10000. , , , , 998001 10000 ( 999 * 999 100 * 100).

for c in (10000...998001).to_a.reverse do

202 ... , . , , - 2 . , , . , , 93 . , , , .

, .

for a in range.to_a.reverse do
    for b in (100..a).to_a.reverse do

, , , , , , . , , , ?

alt text

, , . , . , 2200 .

0

Ruby:

def largest_palindrome_product(digits)
  largest, upper, lower = 0, 10**digits - 1, 10**(digits - 1)

  for i in upper.downto(lower) do
    for j in i.downto(lower) do
      product = i * j
      largest = product if product > largest && palindrome?(product)
    end
  end
  largest
end

, :

def palindrome?(input)
  chars = input.to_s.chars
  for i in 0..(chars.size - 1) do
    return false if chars[i] != chars[chars.size - i - 1]
  end
  true
end

, , , .

0

, , , 9. , 9 ().

, , 9, , 9 1, 3 3, 7 7.

(, 999 * 998, 9).

999 991, 10 991, 999 981 ..... 993 993... 993 * 983 997 * 997, 997 * 987 .. 900 10 ^ 4 - 10 ^ 3, , .

int PB4_firstTry(int size)
{
    int nb1 = (int)pow(10.0,size+1.0) - 1, nb2 = (int)pow(10.0,size+1.0) - 1;
    int pal91 = getFirstPalindrome(size,9,1);
    int pal33 = getFirstPalindrome(size,3,3);
    int pal77 = getFirstPalindrome(size,7,7);

    int bigger1 = (pal91 > pal33) ? pal91 : pal33;
    return (bigger1 > pal77) ? bigger1 : pal77;
}

int getFirstPalindrome(int size,int ending1,int ending2)
{
    int st1 =  (int)pow(10.0,size+1.0) - 10 + ending1;
    int comp = st1 - pow(10.0,size);
    int st2 =  (int)pow(10.0,size+1.0) - 10 + ending2;
    int answer = -1;
    while (st1 > comp)
    {
        for (int i = st2; i > comp && st1*i > answer; i-=10)
        {
            if (PB4_isPalindrome(st1*i))
                answer = st1*i;
        }
        st1 -= 10;
    }
    return answer;
}

bool PB4_isPalindrome(int number)
{
    std::string str = intToString(number);
    for (int i = 0; i < (int)(str.length() / 2); i++)
    {
        if (str[i] != str[str.length() - 1 - i])
            return false;
    }
    return true;
}

std::string intToString(int number)
{
    std::ostringstream convert;
    convert << number;
    return convert.str();
}

, 4- ..

0

All Articles