пятница, 21 июня 2013 г.

Самый большой полиндром

Число называется полиндромным если оно читается одинокого в двух сторон. Самый большой полиндром которое получается от произвидение 2 2-значних чисел 9009 = 91 × 99.
Найти самый большой полиндром которое получается от произвидение 2 3-значних чисел.
Решение по C++
#include <iostream>
#include <math.h>

bool is_palindrome(int);
int digit_number(int);
void get_digit_array(int, int[]);

int main()
{
    int max_palidrome = 0;
    for (int i=0; i<=999; i++)
    {
        for (int j=100; j<=999; j++)
        {
            if (is_palindrome(i*j))
            {
                if (i*j > max_palidrome)
                    max_palidrome = i * j;
            }
        }
    }   
    std::cout << "Max Palidrome = " << max_palidrome << std::endl;
    return 0;
}

bool is_palindrome(int n)
{
    int dn = digit_number(n);
    int a[dn];
    get_digit_array(n, a);

    for (int i=0; i<dn; i++)
    {
        if (a[i] != a[dn-i-1])
            return false;   
    }
    return true;
}

int digit_number(int n)
{
    int t = 1;
    while(1)
    {
        int p = pow(10, t);
        if (n % p == n)
            return t;
        t++;
    }
    return 0;
}

void get_digit_array(int n, int a[])
{
    int k = digit_number(n);
    int l = 0;
    for (int i=k-1; i>=0; i--)
    {
        int t = n / pow(10, i);
        a[l] = t%10;
        l++;
    }   
}

Результат
Max Palidrome = 906609

Комментариев нет:

Отправить комментарий