## 1342. Number of Steps to Reduce a Number to Zero

Given a non-negative integer `num`, return the number of steps to reduce it to zero. If the current number is even, you have to divide it by 2, otherwise, you have to subtract 1 from it.

Example 1:

```Input: num = 14
Output: 6
Explanation:
Step 1) 14 is even; divide by 2 and obtain 7.
Step 2) 7 is odd; subtract 1 and obtain 6.
Step 3) 6 is even; divide by 2 and obtain 3.
Step 4) 3 is odd; subtract 1 and obtain 2.
Step 5) 2 is even; divide by 2 and obtain 1.
Step 6) 1 is odd; subtract 1 and obtain 0.
```

Example 2:

```Input: num = 8
Output: 4
Explanation:
Step 1) 8 is even; divide by 2 and obtain 4.
Step 2) 4 is even; divide by 2 and obtain 2.
Step 3) 2 is even; divide by 2 and obtain 1.
Step 4) 1 is odd; subtract 1 and obtain 0.
```

Example 3:

```Input: num = 123
Output: 12
```

Constraints:

• `0 <= num <= 10^6`

## Rust Solution

``````struct Solution;

impl Solution {
fn number_of_steps(mut num: i32) -> i32 {
let mut res = 0;
while num != 0 {
if num & 1 == 1 {
num -= 1;
} else {
num >>= 1;
}
res += 1;
}
res
}
}

#[test]
fn test() {
let num = 14;
let res = 6;
assert_eq!(Solution::number_of_steps(num), res);
let num = 8;
let res = 4;
assert_eq!(Solution::number_of_steps(num), res);
let num = 123;
let res = 12;
assert_eq!(Solution::number_of_steps(num), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.