C中数字的回文数

时间:2013-05-28 16:55:19

标签: c while-loop numbers palindrome

#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位数的最大回文数。 如果我正在运行单个部件,即数字的反转,检查数字是否是回文或for循环,它们工作正常,但在程序中它们将垃圾作为输出。 任何帮助,将不胜感激。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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);
}

答案 2 :(得分:1)

您的代码有4个问题: -

  1. 像another.anon.coward所说 - 你需要把rev=0放在内圈

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

  3. 你的算法也错了。根据您的程序,最大的6位数字是906609(正确的答案是999999)。为此,您应将内部循环更改为j=0;j<999;j++并将n=i*j更改为n=i*1000+j

  4. 同时将printf("\n%d",ans);移出循环。

  5. 更正后的计划是:

        #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);
        }
    

答案 3 :(得分: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);
}