所以在Project Euler上,问题4陈述如下:
回文数字两种方式相同.由两个2位数字的乘积制成的最大回文是9009 = 91 99.
找到由两个3位数字的乘积制成的最大回文.
我尝试过以下方法:
#include <stdio.h>
#include <stdlib.h>
int check(int result)
{
char b[7];
sprintf(b, "%d", result);
if (b[0] == b[5] && b[1] == b[4] && b[2] == b[3])
{
return 1;
}
else
{
return 0;
}
}
int main () {
int i;
int g;
int final;
for (i = 999; i > 99; i--)
{
for (g = 999; g > 99; g--)
{
if (check(g*i) == 1)
{
final = g*i;
goto here;
}
}
}
here:
printf("%d", final);
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.而不是正确的答案,我得到580085,我认为至少是回文,但仍然不是正确的答案.
让我解释一下我的程序int main:
int i和int g是我的乘数.它们是两个三位数字.int final 是存储最大回文数的数字.现在让我解释一下我的检查:
sprintf将一个\0角色放在最后.result(i*gin in int main)并把它放入char b[7].b通过硬编码我需要检查的每个插槽来检查它是否与自己相等.这对我来说似乎是完全合乎逻辑的,但是,它并不适用于一些奇怪的原因.任何提示?
Emi*_*lva 13
这个假设是错误的:
第一回文应该是最重要的回归,因为我从顶部开始倒计时.
你999*100 = 99900之前会检查998*101 = 100798,所以很明显你不能指望它.