判断回文数
讲了两种方法,暴力反转法和反转一半的数字。
一,暴力反转法
限制
空间会开的浪费一点。并且可能超时(不推荐)
原理
一个回文数反转后也和它本身相等,可以先转换成一个字符串,然后再判断是否相等。
源代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
bool isPalindrome(int x)
{
string s1 = to_string(x);
string s2(s1);
reverse(s1.begin(), s1.end());
if (s1 == s2) return true;
else return false;
}
二,反转一半的数字
适用
适用于回文数字,推荐。
原理
- 后一半数字反转后与前一半数字相等。
- 首先判断临界值
- 1,x是负数,肯定不是回文数
- 2,x大于0,并且最后一位是0(因为如果大于0,那么第一位一定不是0,最后一位肯定也不是0)。
- 一直获取最后一位,直到原数据<=获取数据。
- 最后返回
- 数字长度为奇数时候,可以通过 revertedNum / 10去除中间的数字
- 例如:12321 while循环结束后会得到x = 12,revertedNum = 123
- 由于处于中间的数字不影响回文,可以将他去掉。
源代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
bool isPalindrome(int x)
{
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int revertedNum = 0;
// 不断获取最后一位
while(x > revertedNum)
{
revertedNum = revertedNum * 10 + x % 10;
x /= 10;
}
return x == revertedNum || x == revertedNum / 10;
}
版权声明:
作者:徐锦桐
链接:https://www.xujintong.com/2023/02/12/161/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者:徐锦桐
链接:https://www.xujintong.com/2023/02/12/161/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
THE END