问题是检查给定二进制数的十进制表示形式是否可被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.
?>
输出:
Yes
时间复杂度: O(n),其中n是二进制数中的位数。