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 ,检查 number 是否是回文或 for 循环,它们工作正常,但在程序中它们将垃圾作为输出。任何帮助,将不胜感激。

4

4 回答 4

2

是的,问题是您没有像 cowanother.anon.ard 所说的那样将 rev 重新初始化为 0。尝试将 rev=0 放入内部 for 循环。

但是你不能通过你的方法得到 999999 作为 6 位的最高回文数,因为你没有检查所有的 6 位数字。

于 2013-05-28T17:48:26.667 回答
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 回答
1

您的代码有 4 个问题:-

  1. 就像 another.anon.coward 说的 - 你需要把rev=0里面的循环

  2. 您需要用空格或换行符 ('\n') 分隔打印的每个数字 printf("\n %d");。否则它们看起来就像一个大数字(垃圾)。

  3. 你的算法也是错误的。根据你的程序,最大的 6 位数字是 906609(正确答案是 999999)。为此,您应该将内部循环更改为j=0;j<999;j++并更改n=i*jn=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 回答