[每日一题]--回文数

题目

给你一个整数 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 中。具体步骤如下:

  1. 将 n 赋值给变量 i,用于后续比较。
  2. 初始化变量 sum 为 0。
  3. 当 n 大于 0 时,执行以下步骤:
    • 将 n 对 10 取模得到个位数,并将其乘以 10 并加到 sum 中。
    • 将 n 除以 10 并向下取整,以便进行下一次迭代。
  4. 当 n 小于等于 0 时,跳出循环。
  5. 比较变量 sum 是否等于变量 i,如果相等,则说明 n 是回文数,输出 "true",否则输出"false"。
  6. 如果没有接收到任何输入,或者输入的不是整数,则跳出循环,结束程序。

这段代码利用了回文数的定义,将整数逆序排列后与原数进行比较,从而判断是否为回文数。

接着我们将代码改写成力扣解题的格式:

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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值