判斷回文數算法


回文數是指正序(從左到右)讀和倒序(從右到左)讀都是一樣的整數。

比如形如 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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM