📌  相关文章
📜  检查两个数字的二进制表示形式是否为字谜

📅  最后修改于: 2021-05-25 02:40:09             🧑  作者: Mango

给定两个数字,您需要检查它们是否以二进制表示形式彼此正确。
例子:

Input : a = 8, b = 4 
Output : Yes
Binary representations of both
numbers have same 0s and 1s.

Input : a = 4, b = 5
Output : No

简单方法:

  1. 使用简单的十进制到二进制表示技术查找“ a”和“ b”的二进制表示。
  2. 检查两个二进制表示形式是否为字谜
C++
// A simple C++ program to check if binary
// representations of two numbers are anagram.
#include 
#define ull unsigned long long int
using namespace std;
 
const int SIZE = 8 * sizeof(ull);
 
bool bit_anagram_check(ull a, ull b)
{
    // Find reverse binary representation of a
    // and store it in binary_a[]
    int i = 0, binary_a[SIZE] = { 0 };
    while (a > 0) {
        binary_a[i] = a % 2;
        a /= 2;
        i++;
    }
 
    // Find reverse binary representation of b
    // and store it in binary_a[]
    int j = 0, binary_b[SIZE] = { 0 };
    while (b > 0) {
        binary_b[j] = b % 2;
        b /= 2;
        j++;
    }
 
    // Sort two binary representations
    sort(binary_a, binary_a + SIZE);
    sort(binary_b, binary_b + SIZE);
 
    // Compare two sorted binary representations
    for (int i = 0; i < SIZE; i++)
        if (binary_a[i] != binary_b[i])
            return false;
 
    return true;
}
 
// Driver code
int main()
{
    ull a = 8, b = 4;
    cout << bit_anagram_check(a, b) << endl;
    return 0;
}


Java
// A simple Java program to check if binary
// representations of two numbers are anagram
import java.io.*;
import java.util.*;
 
class GFG
{
    public static int SIZE = 8;
     
    // Function to check if binary representation
    // of two numbers are anagram
    static int bit_anagram_check(long a, long b)
    {
        // Find reverse binary representation of a
        // and store it in binary_a[]
        int i = 0;
        long[] binary_a = new long[SIZE];
        Arrays.fill(binary_a, 0);
        while (a > 0)
        {
            binary_a[i] = a%2;
            a /= 2;
            i++;
        }
  
        // Find reverse binary representation of b
        // and store it in binary_a[]
        int j = 0;
        long[] binary_b = new long[SIZE];
        Arrays.fill(binary_b, 0);
        while (b > 0)
        {
            binary_b[j] = b%2;
            b /= 2;
            j++;
        }
  
        // Sort two binary representations
        Arrays.sort(binary_a);
        Arrays.sort(binary_b);
  
        // Compare two sorted binary representations
        for (i = 0; i < SIZE; i++)
            if (binary_a[i] != binary_b[i])
                return 0;
  
        return 1;
    }
 
    // driver program
    public static void main (String[] args)
    {
        long a = 8, b = 4;
        System.out.println(bit_anagram_check(a, b));
    }
}
 
// Contributed by Pramod Kumar


Python3
# A simple C++ program to check if binary
# representations of two numbers are anagram.
SIZE = 8
def bit_anagram_check(a, b):
 
    # Find reverse binary representation of a
    # and store it in binary_a[]
    global size
 
    i = 0
    binary_a = [0] * SIZE
    while (a > 0):
        binary_a[i] = a % 2
        a //= 2
        i += 1
 
    # Find reverse binary representation of b
    # and store it in binary_a[]
    j = 0
    binary_b = [0] * SIZE
    while (b > 0):
        binary_b[j] = b % 2
        b //= 2
        j += 1
 
    # Sort two binary representations
    binary_a.sort()
    binary_b.sort()
 
    # Compare two sorted binary representations
    for i in range(SIZE):
        if (binary_a[i] != binary_b[i]):
            return 0
    return 1
 
# Driver code
if __name__ == "__main__":
 
    a = 8
    b = 4
    print(bit_anagram_check(a, b))
 
    # This code is contributed by ukasp.


C#
// A simple C# program to check if
// binary representations of two
// numbers are anagram
using System;
 
class GFG
{
public static int SIZE = 8;
 
// Function to check if binary
// representation of two numbers
// are anagram
public static int bit_anagram_check(long a,
                                    long b)
{
    // Find reverse binary representation
    // of a and store it in binary_a[]
    int i = 0;
    long[] binary_a = new long[SIZE];
    Arrays.Fill(binary_a, 0);
    while (a > 0)
    {
        binary_a[i] = a % 2;
        a /= 2;
        i++;
    }
 
    // Find reverse binary representation 
    // of b and store it in binary_a[]
    int j = 0;
    long[] binary_b = new long[SIZE];
    Arrays.Fill(binary_b, 0);
    while (b > 0)
    {
        binary_b[j] = b % 2;
        b /= 2;
        j++;
    }
 
    // Sort two binary representations
    Array.Sort(binary_a);
    Array.Sort(binary_b);
 
    // Compare two sorted binary
    // representations
    for (i = 0; i < SIZE; i++)
    {
        if (binary_a[i] != binary_b[i])
        {
            return 0;
        }
    }
 
    return 1;
}
 
public static class Arrays
{
public static T[] CopyOf(T[] original,
                            int newLength)
{
    T[] dest = new T[newLength];
    System.Array.Copy(original, dest, newLength);
    return dest;
}
 
public static T[] CopyOfRange(T[] original,
                                 int fromIndex,
                                 int toIndex)
{
    int length = toIndex - fromIndex;
    T[] dest = new T[length];
    System.Array.Copy(original, fromIndex,
                         dest, 0, length);
    return dest;
}
 
public static void Fill(T[] array, T value)
{
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = value;
    }
}
 
public static void Fill(T[] array, int fromIndex,
                           int toIndex, T value)
{
    for (int i = fromIndex; i < toIndex; i++)
    {
        array[i] = value;
    }
}
}
 
 
// Driver Code
public static void Main(string[] args)
{
    long a = 8, b = 4;
    Console.WriteLine(bit_anagram_check(a, b));
}
}
 
// This code is contributed by Shrikant13


Javascript


输出:

1