用C语言求解Euler#4工程
我试图用C语言解决Euler项目的问题4,但总是得到错误的答案用C语言求解Euler#4工程,c,project,C,Project,我试图用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] = (
// 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;
}
//欧拉计划-问题5
// 09/01/2014
#包括
int a,b,c,数字[14],e,y,z,biggestNum;
无效isPalindrome(int x)
{
a=-1;
c=0;
b=x;
而(b!=0)
{
数字[c]=(b%10);
b=b/10;
C++;
}
而(c>=a)
{
如果(数字[++a]!=数字[--c])
{
打破
}
如果(a==c){biggestNum=x;}
如果(a==c-1){biggestNum=x;}
}
}
内部主(空)
{
对于(y=10;y
您可以通过以下方法改进foor循环:
对于(y=999;y>=100;--y)
{
对于(z=y;z>=100;--z)
{
if(isPalindrome(y*z)){
返回y*z;//TODO:使用临时变量
}
}
}
将数字转换为字符串和使用n/2步骤(n为位数)进行检查会更容易
对于(i=0;i
到
您的代码没有找到最大的回文,如果您遍历这些数字,它会找到最后一个回文
10* 10, 10 * 11, 10 * 12, .... 10 * 999
...
999 * 10, 999 * 11, .... 999 * 999
如果最大的回文恰好是(比如)750*750,但999*11也是回文,那么999*11将覆盖正确答案
每次你都需要测试你的答案是否比上一个最大的答案大。如果你在帖子中提供问题的链接,这将非常有帮助。好吧,如果你的isPalindrome函数占源代码的90%,剩下的10%是主线,那么问题很可能在isPalin中drome函数。您可能需要查看并进行一些调试。它是否正确检测回文?它是否正确拒绝非回文的数字?您的代码打印什么?它打印两个3位数字乘积的最大回文数是的,isPalindrome
函数有问题。函数namedis
应该返回一个布尔值,不做任何其他事情。这是一个固定的法则。你的函数返回void
。因此,不管它做什么,这个函数都是不可接受的。为什么不从999开始到100,毕竟我们想要最大的回文,用这种方法得到的第一个回文就是答案。你是r是的,我的答案是错误的,因为没有计算999*999
,我会更新。非常感谢。这就是我修复代码后的问题,它输出的数字是906609,这是正确的答案。
for (i = 0; i < n/2; i++)
{
if (str[i] != str(n-i)) {
return false;
}
}
return true
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;
10* 10, 10 * 11, 10 * 12, .... 10 * 999
...
999 * 10, 999 * 11, .... 999 * 999