Count number of steps to cover a distance if steps can be taken in powers of 2

Given a distance K to cover, the task is to find the minimum steps required to cover the distance if steps can be taken in powers of 2 like 1, 2, 4, 8, 16……..

Examples :

Input : K = 9
Output : 2

Input : K = 343 
Output : 6

The minimum steps required can be calculated by reducing K by the highest power of 2 in each step which can be obtained by counting no. of set bits in the binary representation of a number.



Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to count the minimum number of steps 
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to count the minimum number of steps
int getMinSteps(int K)
{
   // __builtin_popcount() is a C++ function to 
   // count the number of set bits in a number
   return __builtin_popcount(k);
}
  
// Driver Code
int main()
{
    int n = 343;
      
    cout << getMinSteps(n)<< '\n';
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to count minimum number of steps 
import java.io.*;
  
class GFG
{
      
    // Function to count the minimum number of steps 
    static int getMinSteps(int K) 
    
        // count the number of set bits in a number 
        return Integer.bitCount(K);
    
      
    // Driver Code 
    public static void main (String[] args)
    
        int n = 343
          
        System.out.println(getMinSteps(n)); 
    
}
  
// This code is contributed by AnkitRai01

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 implementation of the approach 
  
# Function to count the minimum number of steps 
def getMinSteps(K) :
      
    # bin(K).count("1") is a Python3 function to 
    # count the number of set bits in a number 
    return bin(K).count("1")
  
# Driver Code 
n = 343
print(getMinSteps(n))
  
# This code is contributed by
# divyamohan123

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count minimum number of steps
using System;
      
class GFG
{
      
    // Function to count the minimum number of steps 
    static int getMinSteps(int K) 
    
        // count the number of set bits in a number 
        return countSetBits(K);
    
      
    static int countSetBits(int x)
    {
        int setBits = 0;
        while (x != 0)
        {
            x = x & (x - 1);
            setBits++;
        }
        return setBits;
    }
      
    // Driver Code 
    public static void Main (String[] args)
    
        int n = 343; 
          
        Console.WriteLine(getMinSteps(n)); 
    
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

6

Time Complexity :  O(log(n))



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.