给定二进制字符串的十进制表示是否可被 5 整除
问题是检查给定二进制数的十进制表示是否可以被 5 整除。请注意,这个数字可能非常大,甚至可能不适合 long long int。该方法应该使得乘法和除法运算的次数为零或最少。输入中没有前导 0。例子:
Input : 1010
Output : YES
(1010)2 = (10)10,
and 10 is divisible by 5.
Input : 10000101001
Output : YES
方法:以下步骤是:
- 将二进制数转换为基数 4。
- 以 4 为底的数字仅包含 0、1、2、3 作为数字。
- 以 4 为底的 5 等于 11。
- 现在应用可被 11 整除的规则,将奇数位的所有数字相加,偶数位的所有数字相加,然后从另一个中减去一个。如果结果可以被 11 整除(记住是 5),那么二进制数可以被 5 整除。
如何将二进制数转换为基数 4 表示?
- 检查二进制字符串的长度是偶数还是奇数。
- 如果奇数,则在字符串的开头添加“0”。
- 现在,从左到右遍历字符串。
- 一种是提取大小为 2 的子字符串,并将其等效的小数添加到结果字符串中。
C++
// C++ implementation to check whether decimal representation
// of given binary number is divisible by 5 or not
#include
using namespace std;
// function to return equivalent base 4 number
// of the given binary number
int equivalentBase4(string bin)
{
if (bin.compare("00") == 0)
return 0;
if (bin.compare("01") == 0)
return 1;
if (bin.compare("10") == 0)
return 2;
return 3;
}
// function to check whether the given binary
// number is divisible by 5 or not
string isDivisibleBy5(string bin)
{
int l = bin.size();
if (l % 2 != 0)
// add '0' in the beginning to make
// length an even number
bin = '0' + bin;
// to store sum of digits at odd and
// even places respectively
int odd_sum, even_sum = 0;
// variable check for odd place and
// even place digit
int isOddDigit = 1;
for (int i = 0; i
Java
//Java implementation to check whether decimal representation
//of given binary number is divisible by 5 or not
class GFG
{
// Method to return equivalent base 4 number
// of the given binary number
static int equivalentBase4(String bin)
{
if (bin.compareTo("00") == 0)
return 0;
if (bin.compareTo("01") == 0)
return 1;
if (bin.compareTo("10") == 0)
return 2;
return 3;
}
// Method to check whether the given binary
// number is divisible by 5 or not
static String isDivisibleBy5(String bin)
{
int l = bin.length();
if (l % 2 != 0)
// add '0' in the beginning to make
// length an even number
bin = '0' + bin;
// to store sum of digits at odd and
// even places respectively
int odd_sum=0, even_sum = 0;
// variable check for odd place and
// even place digit
int isOddDigit = 1;
for (int i = 0; i
Python 3
# Python3 implementation to check whether
# decimal representation of given binary
# number is divisible by 5 or not
# function to return equivalent base 4
# number of the given binary number
def equivalentBase4(bin):
if(bin == "00"):
return 0
if(bin == "01"):
return 1
if(bin == "10"):
return 2
if(bin == "11"):
return 3
# function to check whether the given
# binary number is divisible by 5 or not
def isDivisibleBy5(bin):
l = len(bin)
if((l % 2) == 1):
# add '0' in the beginning to
# make length an even number
bin = '0' + bin
# to store sum of digits at odd
# and even places respectively
odd_sum = 0
even_sum = 0
isOddDigit = 1
for i in range(0, len(bin), 2):
# if digit of base 4 is at odd place,
# then add it to odd_sum
if(isOddDigit):
odd_sum += equivalentBase4(bin[i:i + 2])
# else digit of base 4 is at
# even place, add it to even_sum
else:
even_sum += equivalentBase4(bin[i:i + 2])
isOddDigit = isOddDigit ^ 1
# if this diff is divisible by 11(which is
# 5 in decimal) then, the binary number is
# divisible by 5
if(abs(odd_sum - even_sum) % 5 == 0):
return "Yes"
else:
return "No"
# Driver Code
if __name__=="__main__":
bin = "10000101001"
print(isDivisibleBy5(bin))
# This code is contributed
# by Sairahul Jella
C#
// C# implementation to check whether
// decimal representation of given
// binary number is divisible by 5 or not
using System;
class GFG
{
// Method to return equivalent base
// 4 number of the given binary number
public static int equivalentBase4(string bin)
{
if (bin.CompareTo("00") == 0)
{
return 0;
}
if (bin.CompareTo("01") == 0)
{
return 1;
}
if (bin.CompareTo("10") == 0)
{
return 2;
}
return 3;
}
// Method to check whether the
// given binary number is divisible
// by 5 or not
public static string isDivisibleBy5(string bin)
{
int l = bin.Length;
if (l % 2 != 0)
{
// add '0' in the beginning to
// make length an even number
bin = '0' + bin;
}
// to store sum of digits at odd
// and even places respectively
int odd_sum = 0, even_sum = 0;
// variable check for odd place
// and even place digit
int isOddDigit = 1;
for (int i = 0; i < bin.Length; i += 2)
{
// if digit of base 4 is at odd
// place, then add it to odd_sum
if (isOddDigit != 0)
{
odd_sum += equivalentBase4(
bin.Substring(i, 2));
}
// else digit of base 4 is at even
// place, add it to even_sum
else
{
even_sum += equivalentBase4(
bin.Substring(i, 2));
}
isOddDigit ^= 1;
}
// if this diff is divisible by
// 11(which is 5 in decimal) then,
// the binary number is divisible by 5
if (Math.Abs(odd_sum - even_sum) % 5 == 0)
{
return "YES";
}
// else not divisible by 5
return "NO";
}
// Driver Code
public static void Main(string[] args)
{
string bin = "10000101001";
Console.WriteLine(isDivisibleBy5(bin));
}
}
// This code is contributed by Shrikant13
Javascript
输出:
YES