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

📅  最后修改于: 2021-05-25 00:45:03             🧑  作者: Mango

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

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

Input : 11000111001110
Output : Yes

方法:首先,我们需要知道pow(2,i)的最后一位= 2、4、8、6,如果i%4分别等于1、2、3、0,其中i大于等于1.因此,在二进制表示形式中,我们需要从右边知道数字“ 1”的位置,以便知道要与之相乘的2的幂。这将帮助我们获得所需的2的理想幂的最后一位。我们可以将这些数字相加,然后检查总和的最后一位是否为0,这意味着该数字可以被10整除。请注意,如果二进制表示形式的最后一位数字为“ 1”,则它表示一个奇数,因此不能被10整除。

C++
// C++ implementation to check whether decimal
// representation of given binary number is
// divisible by 10 or not
#include 
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
            elif (posFromRight % 4 == 2) :
                sum = sum + 4
            elif (posFromRight % 4 == 3) :
                sum = sum + 8
            elif (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
= 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


输出:

Yes