我尝试使用C语言解决项目Euler的问题4,但始终得到错误的答案。
// Project Euler - Problem 5
// 09/01/2014
#include <stdio.h>
int a,b,c,digits[14],e,y,z,biggestNum;
void isPalindrome (int x)
{
a = -1;
c = 0;
b = x;
while (b != 0)
{
digits[c] = (b % 10);
b=b/10;
c++;
}
while (c>=a)
{
if(digits[++a]!=digits[--c])
{
break;
}
if(a==c) { biggestNum=x; }
else if(a==c-1) { biggestNum=x; }
}
}
int main (void)
{
for(y=10; y<1000; y++)
{
for(z=10; z<1000; z++)
{
isPalindrome(y*z);
}
}
printf ("%d",biggestNum);
return 0;
}
有人能告诉我我的代码有什么问题吗?也许在检查num是否是Palindrome函数? 谢谢 The Problem
答案 0 :(得分:1)
for(y = 999; y >= 100 ; --y) { for(z = y; z >= 100; --z) { if (isPalindrome(y*z)) { return y*z; // TODO: use temp var } } }
for (i = 0; i < n/2; i++) { if (str[i] != str(n-i)) { return false; } } return true
答案 1 :(得分:1)
您的代码找不到最大的Palindrome,如果您查看数字,它会找到最后一个Palindrome
10* 10, 10 * 11, 10 * 12, .... 10 * 999
...
999 * 10, 999 * 11, .... 999 * 999
如果最大的回文恰好是(例如)750 * 750,而999 * 11是回文,那么999 * 11将覆盖正确答案。
每次你的答案大于之前的最大答案时,你需要进行测试。
答案 2 :(得分:0)
变化
while (c>=a)
{
if(digits[++a]!=digits[--c])
{
break;
}
if(a==c) { biggestNum=x; }
else if(a==c-1) { biggestNum=x; }
}
到
while (c > a){
if(digits[++a]!=digits[--c])
return ;
}
if(x>biggestNum)//bigger than old value
biggestNum=x;