1. 程式人生 > >判斷一個整數是否為迴文數

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

問題

判定一個正整數是否是一個迴文數。例如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;
}