0
#include<stdio.h>

int main(void)
{
 int rev=0,temp=0,frwd,n,ans=0;
 int i,j;
    for(i=100;i<=999;i++)
    {   
        for(j=i;j<=999;j++)
        {
            n = i*j;
        frwd = n;
        while(n!=0)
        {   

            temp = n%10;
            n = n/10;
            rev = temp+rev*10;

        }       
        printf("%d",rev);       
        if((rev == frwd)&&(ans<frwd))
        {
            ans=frwd;
            printf("%d",ans);
        }
        }
    }
return(0);
}

私はすべてを解決しようとしましたが、このコードは正しい出力を与えていないようです。目的の出力は、6 桁の最大回文数です。個々の部分、つまり number の反転、回文または for ループであるかどうかの number のチェックを実行している場合、それらは正常に機能していますが、プログラムでは出力としてガベージを与えています。どんな助けでも大歓迎です。

4

4 に答える 4

2
#include<stdio.h>

int main(void)
{
int rev=0,temp=0,frwd,n,ans=0;
int i,j;
for(i=100000;i<=999999;i++)
{

    frwd = n = i;
    rev = 0;
    while(n!=0)
    {

        temp = n%10;
        n = n/10;
        rev = temp+rev*10;

    }
    if((rev == frwd)&&(ans<frwd))
    {
        ans=frwd;
    }

}
printf("%d\n",ans);
return(0);
}
于 2013-05-28T18:01:37.947 に答える
2

問題は、cowanother.anon.ard が言ったように、rev を 0 に再初期化していないことです。内部 for ループに rev=0 を入れてみてください。

ただし、6桁の数字をすべてチェックしていないため、この方法では6桁の最大の回文数として999999を取得できません。

于 2013-05-28T17:48:26.667 に答える
1

コードに関する 4 つの問題:-

  1. another.anon.cowardが言ったように-rev=0内側のループの中に入れる必要があります

  2. 表示される各数値は、スペースまたは改行 ('\n') で区切る必要があります printf("\n %d");。そうしないと、それらは 1 つの大きな数字 (ゴミ) のように見えます。

  3. あなたのアルゴリズムも間違っています。プログラムによると、最大の 6 桁の数字は 906609 (正解は 999999) です。このためには、内側のループをj=0;j<999;j++に変更n=i*jし、 に変更する必要がありますn=i*1000+j

  4. またprintf("\n%d",ans);、ループの外側に移動します。

修正したプログラムは次のとおりです。

    #include <stdio.h>

    int main(void)
    {
     int rev=0,temp=0,frwd,n,ans=0;
     int i,j;
    for(i=100;i<=999;i++)
    {   
        for(j=0;j<=999;j++) /*CORRECTED THIS LINE,*/
        {   rev=0;/*ADDED THIS LINE;*/
            n = (i*1000) + j; /*CORRECTED THIS LINE*/
            frwd = n;
            while(n!=0)
            {   

                temp = n%10;
                n = n/10;
                rev = temp+rev*10;

            }       
            printf("\n%d",rev); /*THIS  LINE,*/
            if((rev == frwd)&&(ans<frwd))
            {
                ans=frwd;
            }
        }
    }
    printf("\n%d",ans); /* AND THIS LINE*/

    return(0);
    }
于 2013-05-28T17:49:29.327 に答える
0
#include <stdio.h>

int main(void)
{
 int rev=0,temp=0,frwd,n,ans=0;
 int i,j;
for(i=100;i<=999;i++)
{   
    for(j=0;j<=999;j++) /*CORRECTED THIS LINE,*/
    {   rev=0;/*ADDED THIS LINE;*/
        n = (i*1000) + j; /*CORRECTED THIS LINE*/
        frwd = n;
        while(n!=0)
        {   

            temp = n%10;
            n = n/10;
            rev = temp+rev*10;

        }       
        printf("\n%d",rev); /*THIS  LINE,*/
        if((rev == frwd)&&(ans<frwd))
        {
            ans=frwd;
        }
    }
}
printf("\n%d",ans); /* AND THIS LINE*/

return(0);
}
于 2015-11-04T08:56:55.240 に答える