【编程题】LeetCode.0007 整数翻转

题目描述:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

示例:

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

这题很简单,解决方法很多,基本步骤为:
1、判断正负;
2、翻转整数;
3、判断尾数0;
4、是否越界。

这些完全可以靠求余获取尾数解决,但完全可以靠库函数解决解没必要自己写代码了。
这里主要是靠string::assign()翻转整数(当然用reverse也可以,只不过注意类内方法名,记得加上std::前缀);
然后通过stoi()将字符串转为int的功能实现第3第4问题。
在这里是利用了如果stoi()返回的数在int定义域范围外会返回runtime_error的特性,在溢出时用try-catch捕捉这个返回错误从而决定返回的答案。

注:
若使用atoi(),则在超出范围时只会返回int的上下界。

代码:

class solution
{
public:
	int reverse(int x)
	{
		string s = to_string(x);
		string flag = "";
		string ans = "";

		if(s[0]=='-')
		{
			flag = "-";
			ans = s.substr(1, s.length() - 1);
		}
		else
		{
			ans = s;
		}
		
		ans.assign(ans.rbegin(), ans.rend());
		ans = flag + ans;

		try
		{
			cout << stoi(ans) << endl;
		}
		catch (exception &e)
		{
			cout << 0 << endl;
		}
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值