找到最大的回文数

时间:2019-06-07 01:08:20

标签: c

首先,我是一名新编码员。我试图找到由在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。任何帮助将不胜感激。

1 个答案:

答案 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?
    }
}