leetcode_rust/
reverse_integer.rs

1#![allow(dead_code)]
2
3
4pub fn reverse(x: i32) -> i32 {
5    use std::i32;
6
7    let mut x = x;
8    let mut ret = 0;
9    while x != 0 {
10        match i32::checked_mul(ret, 10) {
11            Some(val) => {
12                ret = val;
13            }
14            None => {
15                return 0;
16            }
17        };
18        match i32::checked_add(ret, x % 10) {
19            Some(val) => {
20                ret = val;
21            }
22            None => {
23                return 0;
24            }
25        };
26        x /= 10;
27    }
28    ret
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[test]
36    fn test1() {
37        use std::i32;
38        assert_eq!(reverse(123), 321);
39        assert_eq!(reverse(-123), -321);
40        assert_eq!(reverse(120), 21);
41        assert_eq!(reverse(i32::max_value()), 0);
42        assert_eq!(reverse(i32::min_value()), 0);
43    }
44}