Problem 4
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.
C++:
#include <iostream>
using namespace std;
const int FROM = 100;
const int TO = 999;
bool ispalindrome(int product)
{
int miror = 0, temp;
temp = product;
while(temp) {
miror *= 10;
miror += temp % 10;
temp /= 10;
}
return miror == product;
}
int main()
{
int maxpalindrome = 0, temp;
for(int i=TO; i>=FROM; i--)
for(int j=TO; j>=FROM; j--) {
temp = i * j;
if(temp < maxpalindrome)
break;
if(ispalindrome(temp))
if(temp > maxpalindrome)
maxpalindrome = temp;
}
cout << maxpalindrome << endl;
return 0;
}
C++:
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1000000;
const int FROM = 100;
const int TO = 999;
struct node {
int a, b, product;
bool operator < (const node& n) const {
return product < n.product;
}
};
bool ispalindrome1(int product)
{
char s[MAXN+1];
int start, end;
bool isp = true;
sprintf(s, "%d", product);
start = 0;
end = strlen(s)-1;
while(start <= end) {
if(s[start] != s[end]) {
isp = false;
break;
}
start++;
end--;
}
return isp;
}
bool ispalindrome2(int product)
{
int miror = 0, temp;
temp = product;
while(temp) {
miror *= 10;
miror += temp % 10;
temp /= 10;
}
return miror == product;
}
int main()
{
priority_queue<node> q;
node t;
for(int i=FROM; i<=TO; i++)
for(int j=FROM; j<=TO; j++) {
t.a = i;
t.b = j;
t.product = i * j;
q.push(t);
}
while(!q.empty()) {
t = q.top();
q.pop();
if(ispalindrome2(t.product)) {
cout << t.product << endl;
break;
}
}
return 0;
}
Run results:
906609