判斷一個整數是否為迴文數
阿新 • • 發佈:2019-02-15
問題
判定一個正整數是否是一個迴文數。例如12121是迴文數,而1231不是迴文數。迴文數定義為可以以中間某個數字對稱,或者間隔對稱,例如123321,或者1234321。詳細的迴文數介紹請參考維基百科:http://en.wikipedia.org/wiki/Palindromic_number
解法1:轉換成字串
這種方法不僅可以判斷一個數是否為迴文數,還可以判斷文字字串是否是迴文的。bool isPalindrome(int num) { if(num<0) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>return false; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>else <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>return isPalindrome(itoa(num)); <span style="white-space:pre"> </span>} }
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:數字翻轉
將整數翻轉,之後比較,若跟原來的數相等,就是迴文數字 ,//若1234321,倒轉之後數字為1234321,相等,就是迴文數字.bool isPalindrome(int x) { if(x<0) { return false; } int tmp=x,res=0; while(tmp) { res=res*10+tmp%10; tmp=tmp/10; } return x==res; }
解法3:逐位判斷
即逐個的從高位到中間位,每次取位上的單個數字進行比較,首先確定數值的位數n,然後依次比較(n,1),(n-1,2)....
bool isPalindrome(int x) { //負數 if(x < 0) { return false; } int len = 1; while(x / len >= 10) { len *= 10; //獲取位數 } while(x > 0) { //獲取首尾值大小 int left = x / len; //第一個除位數 int right = x % 10; //最後一個 if(left != right) { return false; } else { //相等刪除首尾 x = (x % len) / 10; len /= 100; } } return true; }