1. 程式人生 > >判斷一個數是否迴文數的巧妙解法

判斷一個數是否迴文數的巧妙解法

·迴文數的定義:

對於非負數 其左右兩邊完全相同 則是迴文。 e.g: 121 11 等

對於負數 其絕對值左右兩邊完全相同 則是迴文。 e.g: -121 -11 等

設計一個演算法判斷給定的數是否為迴文數,如果是,輸出true 反之 輸出false;

貼程式碼:

#include <iostream>
#include <math.h>

using namespace std;

bool isPadlindrome(int n)
{
	// 如果是int型別的最小值 顯然不是迴文數
	if (n == INT_MIN)
	{
		return false;
	}

	// 絕對值
	n = abs(n);

	int tmp = 1;

	// 將tmp位數變為與n一致
	while(n / tmp >= 10) // 防止tmp溢位
	{
		tmp *= 10;
	}

	// n = 0 表示所有位比較完
	while(n != 0)
	{
		// 最高位 != 最低位
		if (n / tmp != n % 10)
		{
			return false;
		}

		// 最高位 = 最低位 去掉最高位 去掉最低位
		// 繼續比較
		n = (n % tmp) / 10;
		tmp /= 100;
	}

	return true;
}

int main(void)
{
	int n;
	cin>>n;

	if (isPadlindrome(n))
	{
		cout<<"true"<<endl;
	}
	else
	{
		cout<<"false"<<endl;
	}

	return 0;
}