题目描述(中文)给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围?[?231,??231?? 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。 ?
(English)Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
示例 1:
输入:x = 123 输出:321 示例 2:
输入:x = -123 输出:-321 示例 3:
输入:x = 120 输出:21 示例 4:
输入:x = 0 输出:0
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer
一开始老是出错,就是因为没有考虑溢出的问题,在C和C++中,因为int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1,INT_MIN= -2^31.所有超过该限值的数,都会出现溢出,好像只会出现warning,不会出现error。 ?
#include <iostream>
using namespace std;
/** \brief Reverse Integer
*@NWNU ziyif
*/
class Solution{
public:
int Reverse(int x){
int ans=0;
while(x!=0){
int rev=x%10;
x/=10;
//数据溢出判断
if(ans<INT_MIN/10||ans>INT_MAX/10){
return 0;
}
ans=ans*10+rev;
}
return ans;
}
};
int main()
{
Solution s;
int x;
cin>>x;
int ans=s.Reverse(x);
cout << "ans=" <<ans<< endl;
return 0;
}
|