###### tags: `Leetcode` `easy` `bit` `python` `c++`
# 1342. Number of Steps to Reduce a Number to Zero
## [題目連結:] https://leetcode.com/problems/number-of-steps-to-reduce-a-number-to-zero/description/
## 題目:
Given an integer ```num```, return the number of steps to reduce it to zero.
In one step, 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
```
## 解題想法:
* 此題為,給一數
* 若為奇數: -1
* 若為偶數: 除2
* 求幾次操作後為0
* while迴圈判斷:
* 與1做**and**操作
## Python:
``` python=
class Solution(object):
def numberOfSteps(self, num):
"""
:type num: int
:rtype: int
"""
#若&1==1: -1,else 左移
res=0
while num:
if (num&1==1): #odd
num-=1
else: #even
num>>=1
res+=1
return res
```
## C++:
``` cpp=
class Solution {
public:
int numberOfSteps(int num) {
int res=0;
while (num){
num= (num&1)==1? num-1:num>>1;
res+=1;
}
return res;
}
};
```