您的位置:首页 > 其它

Project Euler Problem 4: Largest palindrome product

2017-03-19 06:39 423 查看
Largest palindrome product

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: