判断一个数是否回文数的巧妙解法

·回文数的定义:

对于非负数 其左右两边完全相同 则是回文。 e.g: 121 11 等

对于负数 其绝对值左右两边完全相同 则是回文。 e.g: -121 -11 等


设计一个算法判断给定的数是否为回文数,如果是,输出true 反之 输出false;


贴代码:

#include 
#include 

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"<

你可能感兴趣的:(算法面试题系列)