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