判斷一個整數是否是迴文數

來源:互聯網
上載者:User
問題

判定一個正整數是否是一個迴文數。例如12121是迴文數,而1231不是迴文數。

解法1:轉換成字串再判斷

要判斷一個整數是否是迴文數,最自然的想法是把整數轉換成一個字串,然後根據迴文的對稱特性進行判斷。數字轉換為字串可以通過itoa函數實現,判斷字串是否為迴文字串代碼如下:

bool isPalindrome(string &str){    int begin = 0, end = str.length()-1;    while (begin < end) {        if (str[begin] == str[end]) {            begin++;            end--;        } else {            return false;        }    }    return true;}

解法2:數字翻轉法

因為是整數,所以可以求出該整數的翻轉後的數值,看是否與原來整數相等。如果相等,則是迴文數,否則不是。翻轉整數代碼如下,傳回值為翻轉後的整數。如12321翻轉後為12321,所以是迴文數;而1231翻轉後為1321,與1231不相等,所以不是迴文數。

int reverse(int num) {  assert(num >= 0);   int rev = 0;  while (num != 0) {    rev = rev * 10 + num % 10;    num /= 10;  }  return rev;}

但是這裡有個潛在的問題就是翻轉後的整數可能會溢出,當然我們可以用long long之類的類型來儲存翻轉結果。但是這個解法總的來看並不完美,我們需要找一個更通用的解法。

解法3:數字位判斷法

我們可以找到一個更通用的解法,那就是先比較整數的第1位和最後1位是否相等,如果不等,則直接返回false;若相等,則接下去判斷剩下的位置,如同迴文字串判斷的過程一樣。代碼如下:

bool isPalindrome(int x) {  if (x < 0) return false;  int div = 1;  while (x / div >= 10) {    div *= 10;  }  while (x != 0) {    int l = x / div;      int r = x % 10;    if (l != r) return false;    x = (x % div) / 10;    div /= 100;  }  return true;}

如整數為121,則div初始會設為100,因此l=21/100=1是整數的第1位,而r=121%10=1是最後1位。這兩位相等,則繼續迴圈,設定x為第2為2,此時div除以100變成1,之所以div除以100是因為每次比較了兩個位。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.