题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-2^31 <= x <= 2^31-1
首先根据回文数的定义,一个回文数正序和倒序是同一个数,那我们不妨将这个数倒过来然后和它原本的数比较,如果相同则表示它是回文数,满足定义。
下面这个解法很直接但是有限制,不能灵活的根据输入的数来判断,限定它就只能判断四位整数是不是回文数。
#include<iostream>
int main() {
int n;
std::cout << "请输入一个四位数" << std::endl;
std::cin >> n;
std::cout << std::endl;
if (n % 10 * 1000 + n / 10 % 10 * 100 + n / 100 % 10 * 10 + n / 1000 == n)
std::cout << "是回文数!" << std::endl;
else std::cout << "不是回文数!" << std::endl;
return 0;
}
那我们想想如何解决这个问题,让它能够根据我们输入的数进行判定是不是回文数。
我们可以用循环来帮助我们判断,这是一个好的想法!!
#include<iostream>
int main() {
int n,i;
std::cin >> n;
i = n;
int sum = 0;
while (n > 0) {
sum = sum * 10 + n % 10;
n = n / 10;
}
if (sum == i)
{
std::cout << "true" << std::endl;
}
else
{
std::cout << "false" << std::endl;
}
return 0;
}
首先,获取一个整数 n
。然后,利用一个循环将 n
逆序重新排列,并将每个数字累加到变量 sum
中。具体步骤如下:
- 将
n
赋值给变量 i,用于后续比较。 - 初始化变量
sum
为 0。 - 当
n
大于 0 时,执行以下步骤:- 将
n
对 10 取模得到个位数,并将其乘以 10 并加到sum
中。 - 将
n
除以 10 并向下取整,以便进行下一次迭代。
- 将
- 当
n
小于等于 0 时,跳出循环。 - 比较变量
sum
是否等于变量 i,如果相等,则说明n
是回文数,输出 "true",否则输出"false"。 - 如果没有接收到任何输入,或者输入的不是整数,则跳出循环,结束程序。
这段代码利用了回文数的定义,将整数逆序排列后与原数进行比较,从而判断是否为回文数。
接着我们将代码改写成力扣解题的格式:
class Solution {
public:
bool isPalindrome(int x) {
int i;
cin >> x;
i = x;
int sum = 0;
while (x > 0) {
sum = sum * 10 + x % 10;
x = x / 10;
}
if (sum == i) {
cout << "true" << endl;
return true;
} else {
cout << "false" << endl;
return false;
}
}
};
可以看到我们通过了测试,非常不错!!!
进阶解法:你能不将整数转为字符串来解决这个问题吗?
这是力扣下面的一个问题,要求咱们转化成字符串来解决这个问题。
百度了一下,我发现了几个好东西,咱们可以直接使用reverse()函数,就直接将字符串倒序了,别忘了头函数#include<algorithm>。至于这个函数怎么用的大家可以自己百度。
#include<iostream>
#include <string>
#include <algorithm>
int main() {
std::string str,s;
std::cin >> str;
s = str;
reverse(str.begin(), str.end()); //str执行完这句,就已经是逆序结果。
if(s==str){
std::cout << "true" << std::endl;
return true;
}
else {
std::cout << "false" << std::endl;
return false;
}
return 0;
}
可以发现这个方法也通过了测试,非常不错!!!
注:
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。