给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
Rust Solution:
1 fn reverse(x: i32) -> i32 {
2 let mut flag = false;
3 let mut abs_x;
4 if 0 < x {
5 flag = true;
6 abs_x = x;
7 } else {
8 abs_x = x.abs();
9 }
10 // println!("abs_x = {}", abs_x);
11
12 let mut result :i32 = 0;
13
14 loop {
15 if abs_x / 10 == 0 && abs_x % 10 == 0 {
16 break;
17 } else {
18 let temp = abs_x % 10;
19 // println!("temp = {}", temp);
20 abs_x = abs_x / 10;
21 result += temp;
22
23 if abs_x == 0 {
24 result *= 1;
25 } else {
26 //这里会发生溢出,如果发生溢出的话这个函数返回的是None
27 // if let Some(value) = result.checked_mul(10) {
28 // result = value;
29 // // println!("result = {}", result);
30 // } else { // 匹配不到值返回的是0
31 // return 0;
32 // }
33
34 let ret = result.checked_mul(10);
35 match ret {
36 Some(value) => result = value,
37 None => { return 0; },
38 }
39 }
40 }
41 }
42
43 if flag { // if flag true
44 // result = result;
45 } else { // if flag false
46 result *= -1;
47 }
48 result
49 }
50
51 fn reverse_v2(x: i32) -> i32 {
52 // println!("{}", x.signum());
53 x.abs()
54 .to_string()
55 .chars().rev()
56 .collect::
57 .parse::
58 .unwrap_or(0) * x.signum()
59
60 }
61 fn main() {
62 // let x = 1534236469;
63 // let x = 123;
64 let x = -321;
65 // let x = 120;
66 let ret = reverse_v2(x);
67
68 println!("x = {}, ret = {}", x, ret);
69 // println!("Hello, world!");
70 }
手机扫一扫
移动阅读更方便
你可能感兴趣的文章