Project Euler问题4的错误解决方案

Incorrect solution to Project Euler Problem 4

本文关键字:错误 解决方案 Euler 问题 Project      更新时间:2023-10-16

我对编程还很陌生。我已经为Project Euler上的问题4创建了一个解决方案。然而,我的代码似乎有问题,没有给我想要的结果。手头的问题是找到两个3位数相乘产生的最大回文。当我以100开始两个循环时,代码工作得很好(这是为了找到通过乘以两个2位数获得的最大回文(。在这种情况下,我的输出是90909,而它应该是906609。有人能帮我复习一下代码吗?

#include "iostream"
using namespace std;
int checkPalindrome(int);
int main()
{
int prod;
for(int i=1000;i>0;i--)
for(int j=1000;j>0;j--)
{
prod=i*j;
if(checkPalindrome(prod))
{      cout<<prod;
cout<<endl;
exit(0);
}
}
}
int checkPalindrome(int x)
{
int temp=0,copy;
copy=x;
while(x!=0){
temp=temp*10+(x%10);
x/=10;
}
if(copy==temp)
return 1;
else
return 0;
}

您实际上并不是在搜索通过将两个3位数与您的解决方案相乘而创建的最大回文,而是在搜索循环找到的第一个回文。你可以这样做:

int main()
{
int prod;
int res = 0;
for (int i = 1000; i > 0; i--)
for (int j = 1000; j > 0; j--)
{
prod = i*j;
if (checkPalindrome(prod) && res < prod)
{
res = prod;
}
}
cout << res;
cout << endl;
exit(0);
}