samedi 4 juin 2016

Can time complexity of this code be further reduced?

I am getting a timeout for several test cases of a programming challenge. Any help will be appreciated.

That's the exercise:

A palindromic number reads the same both ways. The smallest 6 digit palindrome made from the product of two 3-digit numbers is 101101 = 143 * 707.

Find the largest palindrome made from the product of two 3-digit numbers which is less than N (any input greater than 101101 and less than 1000000).

What I have is this:

#include<bits/stdc++.h>
using namespace std;
bool check_palindrome(unsigned int a)
{

       unsigned int temp = a;
       unsigned int digit ;        //used for reversing
       unsigned int rev_a = 0;    //final reversed number
       int power = 5;             //used for reversing
       unsigned int modulo;       //used for reversing
    while(temp > 0)
    {
        digit = temp / int(pow(10,power));
        temp = temp % int(pow(10 , power));
        rev_a = rev_a + digit * (pow(10 , 5 - power));
        power--;

    }
return (a == rev_a) ? true : false ; 
    }

int main()
{
int T;
unsigned int n;

scanf("%d" , &T);
for(int i = 0 ; i < T ; i++)             //for entering number of test cases
    {
    unsigned int max_palindrome=0;
    scanf("%d" , &n);                    //Input the number
    for(int p = 101  ; p <= 999 ; p++)
        {
            int m ;
            int other_number = int(n/p);
            if(other_number > 999 )
                 m = 999;
            else 
                m = other_number;

            for( int q = m ; q >100 ; q--)
            {
                if( p*q < 101101)
                       break;
                bool palindrome = check_palindrome(p*q);
                    if(palindrome)
                        {
                            if(p*q > max_palindrome)
                                max_palindrome = p*q;
                                break;
                        }
            }



       }
        printf("%d\n" , max_palindrome);
    }
return 0;
}

Aucun commentaire:

Enregistrer un commentaire