📜  使用按位运算符生成N的前K倍

📅  最后修改于: 2021-04-22 06:08:20             🧑  作者: Mango

给定一个整数N ,任务是使用按位运算符打印N的前K个倍数。

例子:

方法:

请按照以下步骤解决问题:

  • 迭代到K。
  • 对于每次迭代,输出N的当前值。
  • 然后,为N的i设置位计算2 i的总和。将此总和加到N,然后从上面的步骤重复进行。

下面是上述方法的实现:

C++
// C++ program to implement
// the above approach
#include 
using namespace std;
 
// Function to print the first K
// multiples of N
void Kmultiples(int n, int k)
{
    int a = n;
 
    for (int i = 1; i <= k; i++) {
 
        // Print the value of N*i
        cout << n << " * " << i << " = "
             << a << endl;
        int j = 0;
 
        // Iterate each bit of N and add
        // pow(2, pos), where pos is the
        // index of each set bit
        while (n >= (1 << j)) {
 
            // Check if current bit at
            // pos j is fixed or not
            a += n & (1 << j);
 
            // For next set bit
            j++;
        }
    }
}
 
// Driver Code
int main()
{
    int N = 16, K = 7;
 
    Kmultiples(N, K);
 
    return 0;
}


Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
 
// Function to print the first K
// multiples of N
static void Kmultiples(int n, int k)
{
    int a = n;
 
    for (int i = 1; i <= k; i++)
    {
 
        // Print the value of N*i
        System.out.print(n+ " * " +  i+ " = "
             + a +"\n");
        int j = 0;
 
        // Iterate each bit of N and add
        // Math.pow(2, pos), where pos is the
        // index of each set bit
        while (n >= (1 << j))
        {
 
            // Check if current bit at
            // pos j is fixed or not
            a += n & (1 << j);
 
            // For next set bit
            j++;
        }
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int N = 16, K = 7;
 
    Kmultiples(N, K);
}
}
 
// This code is contributed by Rohit_ranjan


Python3
# Python3 program to implement
# the above approach
           
# Function to print the first K
# multiples of N
def Kmultiples(n, k):
     
    a = n
     
    for i in range(1, k + 1):
         
        # Print the value of N*i
        print("{} * {} = {}".format(n, i, a))
        j = 0
         
        # Iterate each bit of N and add
        # pow(2, pos), where pos is the
        # index of each set bit
        while(n >= (1 << j)):
             
            # Check if current bit at
            # pos j is fixed or not
            a += n & (1 << j)
             
            # For next set bit
            j += 1
             
# Driver Code
N = 16
K = 7
 
Kmultiples(N, K)
 
# This code is contributed by Shivam Singh


C#
// C# program to implement
// the above approach
using System;
 
class GFG{
 
// Function to print the first K
// multiples of N
static void Kmultiples(int n, int k)
{
    int a = n;
 
    for(int i = 1; i <= k; i++)
    {
         
        // Print the value of N*i
        Console.Write(n + " * " + i +
                          " = " + a + "\n");
        int j = 0;
 
        // Iterate each bit of N and add
        // Math.Pow(2, pos), where pos is
        //  the index of each set bit
        while (n >= (1 << j))
        {
             
            // Check if current bit at
            // pos j is fixed or not
            a += n & (1 << j);
 
            // For next set bit
            j++;
        }
    }
}
 
// Driver Code
public static void Main(String[] args)
{
    int N = 16, K = 7;
 
    Kmultiples(N, K);
}
}
 
// This code is contributed by Amit Katiyar


Javascript


输出:
16 * 1 = 16
16 * 2 = 32
16 * 3 = 48
16 * 4 = 64
16 * 5 = 80
16 * 6 = 96
16 * 7 = 112

时间复杂度: O(Klog 2 N)
辅助空间: O(1)