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

📅  最后修改于: 2021-05-07 08:42:32             🧑  作者: Mango

问题是检查给定二进制数的十进制表示形式是否可被20整除。请注意,该数字可能非常大,即使int long int也可能不适合。该方法应使得乘法和除法运算的数目为零或最少。输入中没有前导0。


例子 :

Input : 101000
Output : Yes
(10100)2 = (40)10
and 40 is divisible by 20.

Input : 110001110011100
Output : Yes

方法:以下是步骤:

  1. 令二进制字符串为bin []
  2. bin []的长度为n
  3. 如果bin [n-1] ==’1’,则它是一个奇数,因此不能被20整除。
  4. 否则检查bin [0..n-2]是否可被10整除。请参阅此文章。
C++
// C++ implementation to check whether 
// decimal representation of given binary
// number is divisible by 20 or not
#include 
using namespace std;
  
// function to check whether decimal
// representation of given binary number
// is divisible by 10 or not
bool isDivisibleBy10(char bin[], int n)
{
    // if last digit is '1', then
    // number is not divisible by 10
    if (bin[n - 1] == '1')
        return false;
  
    // to accumulate the sum of last digits
    // in perfect powers of 2
    int sum = 0;
  
    // traverse from the 2nd last up 
    // to 1st digit in 'bin'
    for (int i = n - 2; i >= 0; i--) {
  
        // if digit in '1'
        if (bin[i] == '1') {
  
            // calculate digit's position from
            // the right
            int posFromRight = n - i - 1;
  
            // according to the digit's position,
            // obtain the last digit of the 
            // applicable perfect power of 2
            if (posFromRight % 4 == 1)
                sum = sum + 2;
            else if (posFromRight % 4 == 2)
                sum = sum + 4;
            else if (posFromRight % 4 == 3)
                sum = sum + 8;
            else if (posFromRight % 4 == 0)
                sum = sum + 6;
        }
    }
  
    // if last digit is 0, then
    // divisible by 10
    if (sum % 10 == 0)
        return true;
  
    // not divisible by 10
    return false;
}
  
// function to check whether decimal
// representation of given binary number 
// is divisible by 20 or not
bool isDivisibleBy20(char bin[], int n)
{
    // if 'bin' is an odd number
    if (bin[n - 1] == '1')
        return false;
  
    // check if bin(0..n-2) is divisible
    // by 10 or not
    return isDivisibleBy10(bin, n - 1);
}
  
// Driver program to test above
int main()
{
    char bin[] = "101000";
    int n = sizeof(bin) / sizeof(bin[0]);
  
    if (isDivisibleBy20(bin, n - 1))
        cout << "Yes";
    else
        cout << "No";
  
    return 0;
}


Java
// Java implementation to check whether 
// decimal representation of given binary
// number is divisible by 20 or not
import java.io.*;
  
class GFG {
      
    // function to check whether decimal
    // representation of given binary number
    // is divisible by 10 or not
    static boolean isDivisibleBy10(char bin[], int n)
    {
        // if last digit is '1', then
        // number is not divisible by 10
        if (bin[n - 1] == '1')
            return false;
      
        // to accumulate the sum of last 
        // digits in perfect powers of 2
        int sum = 0;
      
        // traverse from the 2nd last up 
        // to 1st digit in 'bin'
        for (int i = n - 2; i >= 0; i--) {
      
            // if digit in '1'
            if (bin[i] == '1') {
      
                // calculate digit's position from
                // the right
                int posFromRight = n - i - 1;
      
                // according to the digit's position,
                // obtain the last digit of the 
                // applicable perfect power of 2
                if (posFromRight % 4 == 1)
                    sum = sum + 2;
                else if (posFromRight % 4 == 2)
                    sum = sum + 4;
                else if (posFromRight % 4 == 3)
                    sum = sum + 8;
                else if (posFromRight % 4 == 0)
                    sum = sum + 6;
            }
        }
      
        // if last digit is 0, then
        // divisible by 10
        if (sum % 10 == 0)
            return true;
      
        // not divisible by 10
        return false;
    }
      
    // function to check whether decimal
    // representation of given binary number 
    // is divisible by 20 or not
    static boolean isDivisibleBy20(char bin[], int n)
    {
        // if 'bin' is an odd number
        if (bin[n - 1] == '1')
            return false;
      
        // check if bin(0..n-2) is divisible
        // by 10 or not
        return isDivisibleBy10(bin, n - 1);
    }
      
    // Driver program to test above
    public static void main(String args[])
    {
        char bin[] = "101000".toCharArray();
        int n = bin.length;
      
        if (isDivisibleBy20(bin, n - 1))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
  
  
// This code is contributed 
// by Nikita Tiwari.


Python3
# Python 3 implementation to check whether 
# decimal representation of given binary
# number is divisible by 20 or not
  
# function to check whether decimal
# representation of given binary number
# is divisible by 10 or not
def isDivisibleBy10(bin, n):
  
    # if last digit is '1', then
    # number is not divisible by 10
    if (bin[n - 1] == '1'):
        return False
  
    # to accumulate the sum of last digits
    # in perfect powers of 2
    sum = 0
  
    # traverse from the 2nd last up 
    # to 1st digit in 'bin'
    for i in range(n - 2, -1, -1): 
  
        # if digit in '1'
        if (bin[i] == '1') :
  
            # calculate digit's position from
            # the right
            posFromRight = n - i - 1
  
            # according to the digit's position,
            # obtain the last digit of the 
            # applicable perfect power of 2
            if (posFromRight % 4 == 1):
                sum = sum + 2
            elif (posFromRight % 4 == 2):
                sum = sum + 4
            elif (posFromRight % 4 == 3):
                sum = sum + 8
            elif (posFromRight % 4 == 0):
                sum = sum + 6
          
      
  
    # if last digit is 0, then
    # divisible by 10
    if (sum % 10 == 0):
        return True
  
    # not divisible by 10
    return False
  
  
# function to check whether decimal
# representation of given binary number 
# is divisible by 20 or not
def isDivisibleBy20(bin, n):
  
    # if 'bin' is an odd number
    if (bin[n - 1] == '1'):
        return false
  
    # check if bin(0..n-2) is divisible
    # by 10 or not
    return isDivisibleBy10(bin, n - 1)
  
  
# Driver program to test above
bin = ['1','0','1','0','0','0']
n = len(bin) 
if (isDivisibleBy20(bin, n - 1)):
    print("Yes")
else:
    print("No")
  
# This code is contributed by Smitha Dinesh Semwal


C#
// C# implementation to check whether 
// decimal representation of given binary
// number is divisible by 20 or not
using System;
  
class GFG {
      
    // function to check whether decimal
    // representation of given binary number
    // is divisible by 10 or not
    static bool isDivisibleBy10(string bin, int n)
    {
        // if last digit is '1', then
        // number is not divisible by 10
        if (bin[n - 1] == '1')
            return false;
      
        // to accumulate the sum of last 
        // digits in perfect powers of 2
        int sum = 0;
      
        // traverse from the 2nd last up 
        // to 1st digit in 'bin'
        for (int i = n - 2; i >= 0; i--) {
      
            // if digit in '1'
            if (bin[i] == '1') {
      
                // calculate digit's position from
                // the right
                int posFromRight = n - i - 1;
      
                // according to the digit's position,
                // obtain the last digit of the 
                // applicable perfect power of 2
                if (posFromRight % 4 == 1)
                    sum = sum + 2;
                else if (posFromRight % 4 == 2)
                    sum = sum + 4;
                else if (posFromRight % 4 == 3)
                    sum = sum + 8;
                else if (posFromRight % 4 == 0)
                    sum = sum + 6;
            }
        }
      
        // if last digit is 0, then
        // divisible by 10
        if (sum % 10 == 0)
            return true;
      
        // not divisible by 10
        return false;
    }
      
    // function to check whether decimal
    // representation of given binary number 
    // is divisible by 20 or not
    static bool isDivisibleBy20(string bin, int n)
    {
        // if 'bin' is an odd number
        if (bin[n - 1] == '1')
            return false;
      
        // check if bin(0..n-2) is divisible
        // by 10 or not
        return isDivisibleBy10(bin, n - 1);
    }
      
    // Driver program to test above
    public static void Main()
    {
        string bin = "101000";
        int n = bin.Length;
      
        if (isDivisibleBy20(bin, n - 1))
        Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
  
  
// This code is contributed 
// by vt_m.


PHP
= 0; $i--) 
    {
  
        // if digit in '1'
        if ($bin[$i] == '1') 
        {
  
            // calculate digit's position 
            // from the right
            $posFromRight = $n - $i - 1;
  
            // according to the digit's position,
            // obtain the last digit of the 
            // applicable perfect power of 2
            if ($posFromRight % 4 == 1)
                $sum = $sum + 2;
            else if ($posFromRight % 4 == 2)
                $sum = $sum + 4;
            else if ($posFromRight % 4 == 3)
                $sum = $sum + 8;
            else if ($posFromRight % 4 == 0)
                $sum = $sum + 6;
        }
    }
  
    // if last digit is 0, then
    // divisible by 10
    if ($sum % 10 == 0)
        return true;
  
    // not divisible by 10
    return false;
}
  
// function to check whether decimal
// representation of given binary number 
// is divisible by 20 or not
function isDivisibleBy20($bin, $n)
{
    // if 'bin' is an odd number
    if ($bin[$n - 1] == '1')
        return false;
  
    // check if bin(0..n-2) is divisible
    // by 10 or not
    return isDivisibleBy10($bin, $n - 1);
}
  
// Driver code
$bin= "101000";
$n = strlen($bin);
  
if (isDivisibleBy20($bin, $n - 1))
    echo "Yes";
else
    echo "No";
  
// This code is contributed by mits 
?>


输出 :

Yes

时间复杂度:O(n),其中n是二进制数中的位数。