首先,我是一名新编码员。我试图找到由在Euler问题4上发现的2到3位整数组成的乘积所组成的最大回文。我已经编写了一些代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n;
int i,num,k;
int sum, j=1, palindrome = 0;
num = 999*999;
i = n = num;
while(!palindrome){
for(i=999*999; i>10000; i--){
sum = 0;
num = i;
while(num!=0){
k = num%10;
sum = sum*10 + k;
num /= 10;
}
if(i==sum){
printf("\nThe Number is a palindrome ");
palindrome = 1;
break;
}
}
}
printf("%d", sum);
return 0;
}
但这似乎给了我错误的结果。它给出了997799。我在互联网上搜索,结果应该是906609。任何帮助将不胜感激。
答案 0 :(得分:5)
if(n==sum){
什么是n
?您可以在程序顶部将其初始化为999*999
,然后再也不进行更改。也许您是说i
?
if(i==sum){
现在程序会打印997799
,这是一个适当的回文。
但是请注意,没有检查sum
是两个三位数字的乘积。您当前从大量开始并将i
递减1的方法实际上是行不通的。您确实需要两个变量和两个循环来迭代两个三位数字。
但是两个循环将使查找最大的回文式变得更加困难。哦,亲爱的。
for (int a = 100; a <= 999; a++) {
for (int b = 100; b <= 999; b++) {
int n = a * b;
// n is the product of two three digit numbers.
// check: is it a palindrome?
// check: is it the *largest* palindrome?
}
}