3

数値が回文であるかどうかを調べ、C でいくつかのコードを書きました。ルールは、2 つの 3 桁の数字を掛け合わせて、最大の回文を見つけなければならないというものです。答えは 906609 のはずですが、私のコードは 580085 しかありません。

コード:

#include <stdio.h>
#include <stdlib.h>

/* Intialise */
void CalcPalin();
int CheckPalin(int number);

/* Functions */
void CalcPalin()
{
    int result = 0;
    int palin = 0;
    int FNumber = 0;
    int FNumber2 = 0;

    int number = 99;
    int number2 = 100;

    while(number2 < 1000)
    {
        number += 1;

        /*times together - calc result*/
        result = number * number2;

        if(CheckPalin(result) == 1)
        {
            palin = result;
            FNumber = number;
            FNumber2 = number2;
        }

        if(number == 999)
        {
            number = 99;
            number2 += 1;
        }
    }
    printf(" Result = %d, by Multiplying [%d] and [%d]", palin, FNumber, FNumber2 );
}

int CheckPalin(int number)
{
    int checknum, checknum2 = 0;

    checknum = number;
    while(checknum)
    {
        checknum2 = checknum2 * 10 + checknum % 10;
        checknum /= 10;
    }

    if( number == checknum2)
        return 1;
    else
        return 0;
}

int main( void)
{
    CalcPalin();
    return EXIT_SUCCESS;
}

私はそれがばかげた答えであると確信しており、単純なものを探していますが、見つけられないようです。どんな助けでも素晴らしいでしょう

4

2 に答える 2

4

現在の結果が以前の結果よりも高いかどうかをテストしていません。このチェックを追加します。

// test new result is higher than old palin before setting this as palin
if(CheckPalin(result) == 1 && palin < result) 
于 2012-03-05T10:40:50.980 に答える
0

あなたのアルゴリズムの印刷:

 Result = 580085, by Multiplying [583] and [995]

最初の数をさらに増やす方法を見つける必要があるようです。906609 に到達するには、583 と 999 の間に多くの可能性があります。

編集: 実際には、993 * 913 = 906609 を探しています。

于 2012-03-05T10:40:07.013 に答える