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

El problema es verificar si la representación decimal del número binario dado es divisible por 10 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
(101000)2 = (40)10
and 40 is divisible by 10.

Input : 11000111001110
Output : Yes

Enfoque: En primer lugar, necesitamos saber que el último dígito de pow(2, i) = 2, 4, 8, 6 si i % 4 es igual a 1, 2, 3, 0 respectivamente, donde i es mayor que igual a 1. Entonces, en la representación binaria necesitamos saber la posición del dígito ‘1’ de la derecha, para saber la potencia perfecta de 2 con la que se va a multiplicar. Esto nos ayudará a obtener el último dígito de la potencia perfecta requerida de 2. Podemos sumar estos dígitos y luego verificar si el último dígito de la suma es 0 o no, lo que implica que el número es divisible por 10 o no. Tenga en cuenta que si el último dígito en la representación binaria es ‘1’, entonces representa un número impar y, por lo tanto, no es divisible por 10.
 

C++

// C++ implementation to check whether decimal
// representation of given binary number is
// divisible by 10 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(string bin)
{
    int n = bin.size();
     
    // 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;   
}
 
// Driver program to test above
int main()
{
    string bin = "11000111001110";
     
    if (isDivisibleBy10(bin))
        cout << "Yes";
    else
        cout << "No";   
         
    return 0;
}

Java

// Java implementation to check whether decimal
// representation of given binary number is
// divisible by 10 or not
import java.util.*;
 
class GFG {
     
    // function to check whether decimal
    // representation of given binary number
    // is divisible by 10 or not
    static boolean isDivisibleBy10(String bin)
    {
        int n = bin.length();
          
        // if last digit is '1', then
        // number is not divisible by 10
        if (bin.charAt(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.charAt(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;   
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        String bin = "11000111001110";
          
        if (isDivisibleBy10(bin))
            System.out.print("Yes");
        else
            System.out.print("No");  
         
        }
    }
 
// This code is contributed by Arnav Kr. Mandal.   

Python

# Python implementation to check whether
# decimal representation of given binary
# number is divisible by 10 or not
 
 
# function to check whether decimal
# representation of given binary number
# is divisible by 10 or not
def isDivisibleBy10(bin) :
    n = len(bin)
     
    #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'
     
    i = n - 2
    while i >= 0 :
         
        # 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
             
        i = i - 1
         
    # if last digit is 0, then
    # divisible by 10
    if (sum % 10 == 0) :
        return True
         
    # not divisible by 10
    return False
         
 
# Driver program to test above function
 
bin = "11000111001110"
if (isDivisibleBy10(bin)== True) :
    print("Yes")
else :
    print("No")
 
# This code is contributed by Nikita Tiwari.

C#

// C# implementation to check whether decimal
// representation of given binary number is
// divisible by 10 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 = bin.Length;
 
        // 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;
    }
 
    /* Driver program to test above function */
    public static void Main()
    {
        String bin = "11000111001110";
 
        if (isDivisibleBy10(bin))
            Console.Write("Yes");
        else
            Console.Write("No");
    }
}
 
// This code is contributed by Sam007

PHP

<?php
// PHP implementation to
// check whether decimal
// representation of given
// binary number is divisible
// by 10 or not
 
 
// function to check whether
// decimal representation of
// given binary number is
// divisible by 10 or not
function isDivisibleBy10($bin)
{
    $n = strlen($bin);
     
    // 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;
}
 
// Driver Code
$bin = "11000111001110";
if(isDivisibleBy10($bin))
    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 10 or not
 
    // function to check whether decimal
    // representation of given binary number
    // is divisible by 10 or not
    function isDivisibleBy10(bin)
    {
        let n = bin.length;
            
        // 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
        let sum = 0;
            
        // traverse from the 2nd last up to
        // 1st digit in 'bin'
        for (let i = n - 2; i >= 0; i--)   
        {
            // if digit in '1'
            if (bin[i] == '1')
            {
                // calculate digit's position
                // from the right
                let 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;   
    }
   
// driver function
 
        let bin = "11000111001110";
            
        if (isDivisibleBy10(bin))
            document.write("Yes");
        else
            document.write("No");  
   
</script>   

Producción: 
 

Yes

Método: convierta la string binaria dada en decimal usando la función int y luego verifique si es divisible por 10 o no usando la división de módulo.

Python3

# Python code to check
# decimal representation of
# a given binary string is
# divisible by 10 or not
 
str1 = "101000"
# converting binary string in to
# decimal number using int function
decnum = int(str1, 2)
# checking if number is divisible by 10
# or not if divisible print yes else no
if decnum % 10 == 0:
    print("Yes")
else:
    print("No")
 
    # this code is contributed by gangarajula laxmi

Java

// java code to check
// decimal representation of
// a given binary string is
// divisible by 10 or not
 
import java.io.*;
 
class GFG {
    public static void main (String[] args) {
      String s="1010";
      //converting binary string in to
//decimal number using Convert.ToInt function
    int n=Integer.parseInt(s,2);
     
     if (n%10==0)
        {
           System.out.println("Yes");
        }
        else
        {
            System.out.println("No");
        }
       
    }
}

Javascript

<script>
      // JavaScript code for the above approach
      str1 = "101000"
       
      // converting binary string in to
      // decimal number using int function
      decnum = Number.parseInt(str1, 2)
       
      // checking if number is divisible by 10
      // or not if divisible print yes else no
      if (decnum % 10 == 0)
          document.write("Yes")
      else
          document.write("No")
 
  // This code is contributed by Potta Lokesh
  </script>

C#

// C# code to check
// decimal representation of
// a given binary string is
// divisible by 10 or not
using System;
 
public class GFG{
 
    static public void Main (){
        string s="1010";
      //converting binary string in to
//decimal number using Convert.ToInt function
    int n=Convert.ToInt32(s,2);
     
     if (n%10==0)
        {
            Console.Write("Yes");
        }
        else
        {
            Console.Write("No");
        }
    }
}
Producción

Yes

Complejidad temporal: O(n), donde n es el número de dígitos del número binario.
Este artículo es una contribución de Ayush Jauhari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *