题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
Swift解法
class Solution {
func reverse(_ x: Int) -> Int {
let sign = Int32(x.signum())
if x <= Int(Int32.min) || x >= Int(Int32.max) {
return 0
}
var number = Int32(abs(x))
var result: Int32 = 0
while abs(number) > 0 {
let item1 = result.multipliedReportingOverflow(by: 10)
if item1.overflow {
return 0
} else {
result = item1.partialValue
}
let num: Int32 = number % 10
number /= 10
let item2 = result.addingReportingOverflow(num)
if item2.overflow {
return 0
} else {
result = item2.partialValue
}
}
return Int(sign * result)
}
}
C++解法
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <stdio.h>
using namespace std;
class Solution {
public:
int reverse(int x) {
long num = x, value = 0;
while (num) {
value = value * 10 + num % 10;
num /= 10;
}
return (value > INT32_MAX || value < INT32_MIN) ? 0 : (int)value;
}
};
int main(int argc, const char * argv[]) {
// insert code here...
Solution solution;
cout << solution.reverse(101) << endl;
cout << solution.reverse(983) << endl;
cout << solution.reverse(-1024) << endl;
return 0;
}