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 than101101and less than1000000).
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