📌  相关文章
📜  给定二进制字符串的十进制表示是否可被 5 整除

📅  最后修改于: 2022-05-13 01:57:08.342000             🧑  作者: Mango

给定二进制字符串的十进制表示是否可被 5 整除

问题是检查给定二进制数的十进制表示是否可以被 5 整除。请注意,这个数字可能非常大,甚至可能不适合 long long int。该方法应该使得乘法和除法运算的次数为零或最少。输入中没有前导 0。例子:

Input : 1010
Output : YES
(1010)2 = (10)10,
and 10 is divisible by 5.

Input : 10000101001
Output : YES

方法:以下步骤是:

  1. 将二进制数转换为基数 4。
  2. 以 4 为底的数字仅包含 0、1、2、3 作为数字。
  3. 以 4 为底的 5 等于 11。
  4. 现在应用可被 11 整除的规则,将奇数位的所有数字相加,偶数位的所有数字相加,然后从另一个中减去一个。如果结果可以被 11 整除(记住是 5),那么二进制数可以被 5 整除。

如何将二进制数转换为基数 4 表示?

  1. 检查二进制字符串的长度是偶数还是奇数。
  2. 如果奇数,则在字符串的开头添加“0”。
  3. 现在,从左到右遍历字符串。
  4. 一种是提取大小为 2 的子字符串,并将其等效的小数添加到结果字符串中。
C++
// C++ implementation to check whether decimal representation
// of given binary number is divisible by 5 or not
#include 
 
using namespace std;
 
// function to return equivalent base 4 number
// of the given binary number
int equivalentBase4(string bin)
{
    if (bin.compare("00") == 0)
        return 0;
    if (bin.compare("01") == 0)
        return 1;
    if (bin.compare("10") == 0)
        return 2;
    return 3;
}
 
// function to check whether the given binary
// number is divisible by 5 or not
string isDivisibleBy5(string bin)
{
    int l = bin.size();
     
    if (l % 2 != 0)
    // add '0' in the beginning to make
    // length an even number
        bin = '0' + bin;
     
    // to store sum of digits at odd and
    // even places respectively
    int odd_sum, even_sum = 0;
     
    // variable check for odd place and
    // even place digit
    int isOddDigit = 1;
    for (int i = 0; i


Java
//Java implementation to check whether decimal representation
//of given binary number is divisible by 5 or not
 
class GFG
{
    // Method to return equivalent base 4 number
    // of the given binary number
    static int equivalentBase4(String bin)
    {
        if (bin.compareTo("00") == 0)
            return 0;
        if (bin.compareTo("01") == 0)
            return 1;
        if (bin.compareTo("10") == 0)
            return 2;
        return 3;
    }
     
    // Method to check whether the given binary
    // number is divisible by 5 or not
    static String isDivisibleBy5(String bin)
    {
        int l = bin.length();
         
        if (l % 2 != 0)
        // add '0' in the beginning to make
        // length an even number
            bin = '0' + bin;
         
        // to store sum of digits at odd and
        // even places respectively
        int odd_sum=0, even_sum = 0;
         
        // variable check for odd place and
        // even place digit
        int isOddDigit = 1;
        for (int i = 0; i


Python 3
# Python3 implementation to check whether
# decimal representation of given binary
# number is divisible by 5 or not
 
# function to return equivalent base 4
# number of the given binary number
def equivalentBase4(bin):
    if(bin == "00"):
        return 0
    if(bin == "01"):
        return 1
    if(bin == "10"):
        return 2
    if(bin == "11"):
        return 3
     
# function to check whether the given
# binary number is divisible by 5 or not    
def isDivisibleBy5(bin):
    l = len(bin)
    if((l % 2) == 1):
         
    # add '0' in the beginning to
    # make length an even number    
        bin = '0' + bin
         
    # to store sum of digits at odd
    # and even places respectively
    odd_sum = 0
    even_sum = 0
    isOddDigit = 1
    for i in range(0, len(bin), 2):
         
        # if digit of base 4 is at odd place,
        # then add it to odd_sum
        if(isOddDigit):
            odd_sum += equivalentBase4(bin[i:i + 2])
             
        # else digit of base 4 is at
        # even place, add it to even_sum    
        else:
            even_sum += equivalentBase4(bin[i:i + 2])
             
        isOddDigit = isOddDigit ^ 1
 
    # if this diff is divisible by 11(which is
    # 5 in decimal) then, the binary number is
    # divisible by 5
    if(abs(odd_sum - even_sum) % 5 == 0):
        return "Yes"
    else:
        return "No"
 
# Driver Code
if __name__=="__main__":
    bin = "10000101001"
    print(isDivisibleBy5(bin))
 
# This code is contributed
# by Sairahul Jella


C#
// C# implementation to check whether
// decimal representation of given
// binary number is divisible by 5 or not
using System;
 
class GFG
{
// Method to return equivalent base
// 4 number of the given binary number
public static int equivalentBase4(string bin)
{
    if (bin.CompareTo("00") == 0)
    {
        return 0;
    }
    if (bin.CompareTo("01") == 0)
    {
        return 1;
    }
    if (bin.CompareTo("10") == 0)
    {
        return 2;
    }
    return 3;
}
 
// Method to check whether the
// given binary number is divisible
// by 5 or not
public static string isDivisibleBy5(string bin)
{
    int l = bin.Length;
 
    if (l % 2 != 0)
    {
        // add '0' in the beginning to
        // make length an even number
        bin = '0' + bin;
    }
 
    // to store sum of digits at odd
    // and even places respectively
    int odd_sum = 0, even_sum = 0;
 
    // variable check for odd place
    // and even place digit
    int isOddDigit = 1;
    for (int i = 0; i < bin.Length; i += 2)
    {
        // if digit of base 4 is at odd
        // place, then add it to odd_sum
        if (isOddDigit != 0)
        {
            odd_sum += equivalentBase4(
                             bin.Substring(i, 2));
        }
         
        // else digit of base 4 is at even 
        // place, add it to even_sum
        else
        {
            even_sum += equivalentBase4(
                              bin.Substring(i, 2));
        }
 
        isOddDigit ^= 1;
    }
 
    // if this diff is divisible by
    // 11(which is 5 in decimal) then,
    // the binary number is divisible by 5
    if (Math.Abs(odd_sum - even_sum) % 5 == 0)
    {
        return "YES";
    }
 
    // else not divisible by 5
    return "NO";
 
}
 
// Driver Code
public static void Main(string[] args)
{
    string bin = "10000101001";
    Console.WriteLine(isDivisibleBy5(bin));
}
}
 
// This code is contributed by Shrikant13


Javascript


输出:

YES