整数反转
1.题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
2.解题思路
- 该题是简单题,如果题目没有明确要考虑溢出的问题,很难会想到还会有转换后溢出的情况,估计是因为是简单题所以才明示出来的。我们只需要定义一个64位的变量来存放结果,然后再在最后判断这个64位的变量是否对32位的int型变量溢出则可以。
- 具体思路:需要一个64位的变量来存放结果,则定义一个long long 型的变量,用对10求余来得出当前个位数的值,并用这个值加上当前结果乘以10得出新结果,把剩余的数除以10得出新的当前剩余值。以此循环,直到剩余值为0,退出循环,则得到一个可能超出整数取值范围的结果。最终判断结果是否整数溢出,可以使用判断当前值与强制转换为整形的值是否相等,相等则不整数溢出并返回当前值,不相等则整数溢出并放回0。注意该方法不需要考虑x的正负,因为在运算中没有涉及到符号,且64位的变量足够大来存放结果。
3代码:
int reverse(int x){
long long res = 0;
while(x != 0){
res = res * 10 + x % 10;
x = x / 10;
}
return res == (int)res ? (int)res:0;
}
4. 提交执行结果:
生活不易,如果你觉得该文章对你有帮助,请帮忙点个赞👍,如有指教和讨论,请在评论区留言一起探讨。感谢观看!