问题描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
解题思路
从个位开始遍历整数各个位,每次遍历将上一次结果乘10.
代码
Solution.hpp
class Solution {
public:
int reverse(int x);
};
Solution.cpp
#include "Solution.hpp"
int Solution::reverse(int x)
{
int min = 0x80000000; //最小值 -2^31
int max = 0x7fffffff; //最大值 2^31 - 1
int sum = 0;
while(x != 0){
if(sum > max / 10 || sum < min / 10){
return 0;
}
int bit = x %10;
sum = sum*10 + bit;
x = x / 10;
}
return sum;
}
测试代码 main.cpp
#include <iostream>
using namespace std;
#include "Solution.hpp"
void test(Solution &s, int srcInt)
{
int rlt = s.reverse(srcInt);
cout << srcInt << " reverse rlt : " << rlt << endl;
}
int main()
{
Solution s;
test(s, 123);
test(s, 456821);
test(s, -123);
test(s, 1534236469);
return 0;
}