标签:进阶 函数 回文数 方式 details mes out namespace ali
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
输入: 121
输出: true
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
string s = "12";
int a = atoi(s.c_str());
int i = 12;
cout << std::to_string(i) << endl;
说明:此题和第7题不同之处在于,7题需要完全反转整个数字,而本题只需要反转一半。
这样做的好处是:不用溢出检验。
算法流程
a.所有负数都不可能是回文,如-123
b.如果数字的最后一位是0,但他本身不是0的时候,因为不可能有0220,如:10
第3条的解释 给出的循环条件是剩下的原始数字x>反转后的数字rev,所以跳出循环的条件就是:
第一种情况,直接就是回文数;
例子:1221,x=12,rev=12,即为回文数
第二种情况,需要判断rev/10=x
例子:12321,x=12,rev=123,rev/10=12,即为回文数
#include <iostream>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
int rev = 0;//rev记载倒置后的数字
//检验临界情况:负数不是回文数,末尾是0但不等于0的不是回文数
if (x < 0||(x % 10 == 0 && x != 0)) return false;
//原始数字x小于反转后的数字rev
while (x>rev) {
int pop = x % 10;//pop记录x的个位数
x /= 10;//去掉个位数
rev = rev * 10 + pop;//把pop记录的个位数赋值给temp
}
//比较得出是否是回文数
return rev==x||rev/10==x;
}
};
int main() {
Solution solution;
cout << solution.isPalindrome(-123) << endl;
cout << solution.isPalindrome(10) << endl;
cout << solution.isPalindrome(12321) << endl;
}
参考链接
https://blog.csdn.net/single6/article/details/82318175
(未实践)
标签:进阶 函数 回文数 方式 details mes out namespace ali
原文地址:https://www.cnblogs.com/zhuomoyixia/p/12397506.html