La representación decimal de una string binaria dada es divisible por 20 o no

El problema es verificar si la representación decimal del número binario dado es divisible por 20 o no. Tenga cuidado, el número podría ser muy grande y no encajar incluso en long long int. El enfoque debe ser tal que haya cero o un número mínimo de operaciones de multiplicación y división. No hay 0 a la izquierda en la entrada.
Ejemplos: 
 

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

Input : 110001110011100
Output : Yes

Enfoque: Los siguientes son los pasos:
 

  1. Deje que la string binaria sea bin[] .
  2. Deje que la longitud de bin[] sea n .
  3. Si bin[n-1] == ‘1’, entonces es un número impar y, por lo tanto, no es divisible por 20.
  4. De lo contrario, compruebe si bin[0..n-2] es divisible por 10. Consulte esta publicación.

C++

// C++ implementation to check whether
// decimal representation of given binary
// number is divisible by 20 or not
#include <bits/stdc++.h>
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

<?php
// PHP 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
function 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 = $n - 2; $i >= 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
?>

Javascript

<script>
 
// JavaScript 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
function 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
    var sum = 0;
 
    // traverse from the 2nd last up
    // to 1st digit in 'bin'
    for (var i = n - 2; i >= 0; i--) {
 
        // if digit in '1'
        if (bin[i] == '1') {
 
            // calculate digit's position from
            // the right
            var 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 program to test above
var bin = "101000";
var n = bin.length;
if (isDivisibleBy20(bin, n - 1))
    document.write( "Yes");
else
    document.write( "No");
 
</script>

Producción : 
 

Yes

Complejidad temporal: O(n), donde n es el número de dígitos del número binario.

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por ayushjauhari14 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *