判断回文数算法

回文数是指正序(从左到右)读和倒序(从右到左)读都是一样的整数。

比如形如 121,1221,13531 的数字都是回文数,但 -121,10,25 等等都不是回文数。

如何判断一个数是回文数?这是一个很简单的算法,最常见的实现方式是使用一个栈或其他方法,把数字序列逆序,然后判断逆序后的数字是否等于原先的数字。显然这种实现方式需要至少 n 次循环才能完成判断。

本文提供一种更巧妙的方法,利用回文数的特点,只需要循环 \frac{n}{2} 次就可以完成判断了,代码及注释如下:

bool isPalindrome(int x)
{
    // 负数的第一位带有负号'-',所以一定不是回文数
    // 长度超过一位的数字,第一位肯定不是 0,因此末尾是 0,则一定不是回文数
    if (x < 0 || (x % 10 == 0 && x != 0))
        return false;
    // 余下的代码,如果看不懂原理,就带入几个具体的数字,手工模拟运行过程,就很容易明白了
    int revertedNumber = 0;
    while (x > revertedNumber) {
        revertedNumber = revertedNumber * 10 + x % 10;
        x /= 10;
    }
    return x == revertedNumber || x == revertedNumber / 10;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回文数的定义:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例1: 输入:121 输出:Tru...
    只有我最可爱c阅读 2,149评论 1 2
  • 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 12...
    bocsoft阅读 1,263评论 0 0
  • 题目 第9题:回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示...
    DonLex阅读 698评论 0 1
  • 题目描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输...
    zhipingChen阅读 473评论 1 2
  • 无间是最痛苦的一个,没有轮回。 我们其实都在给自己是谁,我们连自己是谁都不清楚了。 ...
    高能磷酸阅读 202评论 0 0