rustgym/leetcode/
_7_reverse_integer.rs1struct 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}