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++:
#includeusing 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#include #include #include 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 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