【C语言】判断回文数

旧街凉风 提交于 2020-02-06 05:28:51

小菜鸡更新第一篇博客啦(有错希望能够指正且多多包涵哈)!

总结一下"回文数"

1. 数字回文数
就普通举例:‘12321’‘5665’之类的都是回文数(即每个数字正排序和逆排序的结果是一样的);
那怎么实现呢?
首先最容易想到的当然是 将 原数 的 逆序数 表示一遍 再判断两者是否相等。
那么有什么比较容易的算法可以简便地把上述步骤呈现出来呢?
来看一段代码片:

int main()
{
    int number;
    scanf("%d", &number);            //输入原数

    int new_number=0;int s=number;  //定义一个new_number来装原数的逆排序数
    								//此处需要定义一个s来代替原本输入的数,不然最后比较新数与原数的时候会出错(即原数经变化不再是原数了)

   while(s!=0)                    //此处的循环条件 即 s/10 到该数的最后一位数 若到了最后一位,s/10的结果必为0
   {
      new_number=new_number*10+s%10;  //一个数除以10的余数就是该数最后一位,每次拿到一个余数,都用来构造新数,新数=新数*10+余数
      s/=10;						//一个数除以10的商就是排除掉最后一位后的数
   }
    if(new_number==number)   //结果出来了就与原数进行比较,相等即为回文数,不等就不是回文数
        printf("是回文数");
    else
        printf("不是回文数");
}

上述代码的算法思路不太理解的话可以手动演算一遍喔

2. 字符回文数
还是简单举例:‘ABCBA’‘qwerrewq’这样类似的字符就是字符回文数(即倒着写与原字符串一样)。
怎么实现呢?
和数字回文数一样,我们想的是将其逆序排列一遍,看看是否与原字符串一样即可。对于字符串来说,有一个好处:经输入后,每个字符的位置是固定的。我们只需要将第一个和第n个比较,第二个与第n-1个比较…遍历一遍,若前后能相互对应一致,则为回文数,否则不是回文数。
来看代码:

 	**int main()
{
    int i;
    char input[100];   //定义一个字符串
    int flag=0;			//定义一个标志
    scanf("%s", input);
    int len = strlen(input);    //获取输入字符串的长度,利于后面前后字符比较(此函数在 string.h  头文件中)

    for(i=0;i<len-1;i++)       //遍历字符串
    {
        if(input[i]!=input[len-1-i])    //    若在遍历过程中,出现了前后对应位置不一样的情况
            flag=1;                     //    则直接给标志flag赋值 1
            break;                      // 因为已经出现了前后不一的情况,则不需要再进行后面的比较,break跳出循环  
    }
    if(flag==1)                         //根据标志flag的值 输出 是否是回文数
        printf("不是回文数");
    else
        printf("是回文数");
}

上述代码还可以优化,比如在遍历中还可以降低时间复杂度

哈哈哈没人看也就算了

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!