---
# System prepended metadata

title: 1342. Number of Steps to Reduce a Number to Zero
tags: [Leetcode, bit, python, c++, easy]

---

###### 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;
    }
};
```