判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
算法思想:
(1)把输入数字中的每一位提取出来,存放在一个数组中
(2)获得数字的长度,用数字n/10,定义一个累加变量count,每除一次count加1,当(n/10<10)时数字的位数为count+1
(3)扫描数组首部和尾部,进行对比,判断是否为回文
算法代码:
bool isPalindrome(int x) {
int a[100];
int i;
int count=0;
int zheng;
int yu;
int temp;
if (x < 0 || (x % 10 == 0 && x != 0))
{
return false;
}
if (x == 0)
{
return true;
}
temp = x;
/*输入数字的位数为count的值加1*/
while (temp >= 10)
{
temp = temp / 10;
count++;
}
//将数字的每一位输入数组中
for (int i = 0; i <= count ; i++)
{
zheng = x / 10;
yu = x % 10;
a[i] = yu;
if (zheng < 10)
{
a[i + 1] = zheng;
break;
}
if (zheng >= 10)
{
x = zheng;
}
}
//判断数组的元素是否为回文
for (int i = 0; i <= count; i++,count--)
{
if (a[i] == a[count])
{
continue;
}
else
{
return false;
}
}
return true;
}
调用这个函数的主函数:
#include<iostream>
using namespace std;
int main()
{
bool ISHuiWenOrNot(int x);
int x;
bool flag;
cout << "请输入一个数字:" << endl;
cin >> x ;
flag = ISHuiWenOrNot(x);
if (flag == true)
cout << "ok" << endl;
if (flag == false)
cout << "no" << endl;
return 0;
}