27 lines
761 B
Rust
27 lines
761 B
Rust
|
pub fn reverse(number: i32) -> i32 {
|
||
|
number
|
||
|
// Convert to an absolute number without wrapping or panicking.
|
||
|
.unsigned_abs()
|
||
|
// Convert the number to string, then reverse all its characters.
|
||
|
.to_string()
|
||
|
.chars()
|
||
|
.rev()
|
||
|
// Collect the reversed characters back into a string.
|
||
|
.collect::<String>()
|
||
|
// Parse the string into an i32.
|
||
|
.parse()
|
||
|
// If it returns an Err then use 0 instead.
|
||
|
.unwrap_or(0)
|
||
|
// Then multiply by 0, 1 or -1 depending on the sign of the original number.
|
||
|
* number.signum()
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_reverse_integer() {
|
||
|
assert_eq!(reverse(123), 321);
|
||
|
assert_eq!(reverse(-123), -321);
|
||
|
assert_eq!(reverse(120), 21);
|
||
|
assert_eq!(reverse(i32::MAX), 0);
|
||
|
assert_eq!(reverse(i32::MIN), 0);
|
||
|
}
|