rustgym/leetcode/
_7_reverse_integer.rs

1struct Solution;
2
3impl Solution {
4    fn reverse(x: i32) -> i32 {
5        let mut abs = x.abs();
6        let sign = x.signum();
7        let mut y: i32 = 0;
8        while abs > 0 {
9            if let Some(v) = y.checked_mul(10) {
10                y = v;
11            } else {
12                return 0;
13            }
14            if let Some(v) = y.checked_add(abs % 10) {
15                y = v;
16            } else {
17                return 0;
18            }
19            abs /= 10;
20        }
21        y * sign
22    }
23}
24
25#[test]
26fn overflow() {
27    assert_eq!(Solution::reverse(2_147_483_647), 0);
28}
29
30#[test]
31fn pass() {
32    assert_eq!(Solution::reverse(123_456_789), 987_654_321);
33}
34
35#[test]
36fn negative() {
37    assert_eq!(Solution::reverse(-123), -321);
38}