Decimal representation of given binary string is divisible by 20 or not
The problem is to check whether the decimal representation of the given binary number is divisible by 20 or not. Take care, the number could be very large and may not fit even in long long int. The approach should be such that there are zero or the minimum numbers of multiplication and division operations. No leadings 0’s are there in the input.
Examples:
Input : 101000
Output : Yes
(10100)2 = (40)10
and 40 is divisible by 20.
Input : 110001110011100
Output : Yes
Approach:
- Initialize a variable ‘dec’ to 0, which will store the decimal value of the binary number.
- Traverse the binary number from left to right and for each digit, multiply the current value of ‘dec’ by 2 and add the current binary digit (0 or 1) to it.
- After the traversal is complete, the final value of ‘dec’ will be the decimal representation of the binary number.
Once we have the decimal representation of the binary number, we can check whether it is divisible by 20 by using the modulo operator (%). If the decimal representation is divisible by 20, then the binary number is also divisible by 20.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
bool isDivisibleBy20( char bin[], int n)
{
int dec = 0;
for ( int i = 0; i < n; i++) {
dec = dec * 2 + (bin[i] - '0' );
}
if (dec % 20 == 0) {
return true ;
}
else {
return false ;
}
}
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
import java.util.*;
class Main {
static boolean isDivisibleBy20( char [] bin, int n)
{
int dec = 0 ;
for ( int i = 0 ; i < n; i++) {
dec = dec * 2 + (bin[i] - '0' );
}
if (dec % 20 == 0 ) {
return true ;
}
else {
return false ;
}
}
public static void main(String[] args)
{
char [] bin = { '1' , '0' , '1' , '0' , '0' , '0' };
int n = bin.length;
if (isDivisibleBy20(bin, n)) {
System.out.println( "Yes" );
}
else {
System.out.println( "No" );
}
}
}
|
Python3
def is_divisible_by_20( bin , n):
dec = 0
for i in range (n):
dec = dec * 2 + int ( bin [i])
if dec % 20 = = 0 :
return True
else :
return False
if __name__ = = '__main__' :
bin = "101000"
n = len ( bin )
if is_divisible_by_20( bin , n):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class MainClass {
static bool IsDivisibleBy20( char [] bin, int n)
{
int dec = 0;
for ( int i = 0; i < n; i++) {
dec = dec * 2 + (bin[i] - '0' );
}
if (dec % 20 == 0) {
return true ;
}
else {
return false ;
}
}
public static void Main()
{
char [] bin = "101000" .ToCharArray();
int n = bin.Length;
if (IsDivisibleBy20(bin, n - 1)) {
Console.WriteLine( "Yes" );
}
else {
Console.WriteLine( "No" );
}
}
}
|
Javascript
function isDivisibleBy20(bin) {
let dec = 0;
for (let i = 0; i < bin.length; i++) {
dec = dec * 2 + parseInt(bin[i]);
}
if (dec % 20 === 0) {
return true ;
} else {
return false ;
}
}
let bin = "101000" ;
if (isDivisibleBy20(bin)) {
console.log( "Yes" );
} else {
console.log( "No" );
}
|
Output: Yes
Time Complexity: O(N)
Space Complexity: O(1)
Approach: Following are the steps:
- Let the binary string be bin[].
- Let the length of bin[] be n.
- If bin[n-1] == ‘1’, then it is an odd number and thus not divisible by 20.
- Else check if bin[0..n-2] is divisible by 10. Refer to this post.
C++
#include <bits/stdc++.h>
using namespace std;
bool isDivisibleBy10( char bin[], int n)
{
if (bin[n - 1] == '1' )
return false ;
int sum = 0;
for ( int i = n - 2; i >= 0; i--) {
if (bin[i] == '1' ) {
int posFromRight = n - i - 1;
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 (sum % 10 == 0)
return true ;
return false ;
}
bool isDivisibleBy20( char bin[], int n)
{
if (bin[n - 1] == '1' )
return false ;
return isDivisibleBy10(bin, n - 1);
}
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
import java.io.*;
class GFG {
static boolean isDivisibleBy10( char bin[], int n)
{
if (bin[n - 1 ] == '1' )
return false ;
int sum = 0 ;
for ( int i = n - 2 ; i >= 0 ; i--) {
if (bin[i] == '1' ) {
int posFromRight = n - i - 1 ;
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 (sum % 10 == 0 )
return true ;
return false ;
}
static boolean isDivisibleBy20( char bin[], int n)
{
if (bin[n - 1 ] == '1' )
return false ;
return isDivisibleBy10(bin, n - 1 );
}
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" );
}
}
|
Python3
def isDivisibleBy10( bin , n):
if ( bin [n - 1 ] = = '1' ):
return False
sum = 0
for i in range (n - 2 , - 1 , - 1 ):
if ( bin [i] = = '1' ) :
posFromRight = n - i - 1
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 ( sum % 10 = = 0 ):
return True
return False
def isDivisibleBy20( bin , n):
if ( bin [n - 1 ] = = '1' ):
return false
return isDivisibleBy10( bin , n - 1 )
bin = [ '1' , '0' , '1' , '0' , '0' , '0' ]
n = len ( bin )
if (isDivisibleBy20( bin , n - 1 )):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG {
static bool isDivisibleBy10( string bin, int n)
{
if (bin[n - 1] == '1' )
return false ;
int sum = 0;
for ( int i = n - 2; i >= 0; i--) {
if (bin[i] == '1' ) {
int posFromRight = n - i - 1;
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 (sum % 10 == 0)
return true ;
return false ;
}
static bool isDivisibleBy20( string bin, int n)
{
if (bin[n - 1] == '1' )
return false ;
return isDivisibleBy10(bin, n - 1);
}
public static void Main()
{
string bin = "101000" ;
int n = bin.Length;
if (isDivisibleBy20(bin, n - 1))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
PHP
<?php
function isDivisibleBy10( $bin , $n )
{
if ( $bin [ $n - 1] == '1' )
return false;
$sum = 0;
for ( $i = $n - 2; $i >= 0; $i --)
{
if ( $bin [ $i ] == '1' )
{
$posFromRight = $n - $i - 1;
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 ( $sum % 10 == 0)
return true;
return false;
}
function isDivisibleBy20( $bin , $n )
{
if ( $bin [ $n - 1] == '1' )
return false;
return isDivisibleBy10( $bin , $n - 1);
}
$bin = "101000" ;
$n = strlen ( $bin );
if (isDivisibleBy20( $bin , $n - 1))
echo "Yes" ;
else
echo "No" ;
?>
|
Javascript
<script>
function isDivisibleBy10(bin, n)
{
if (bin[n - 1] == '1' )
return false ;
var sum = 0;
for ( var i = n - 2; i >= 0; i--) {
if (bin[i] == '1' ) {
var posFromRight = n - i - 1;
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 (sum % 10 == 0)
return true ;
return false ;
}
function isDivisibleBy20(bin, n)
{
if (bin[n - 1] == '1' )
return false ;
return isDivisibleBy10(bin, n - 1);
}
var bin = "101000" ;
var n = bin.length;
if (isDivisibleBy20(bin, n - 1))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(n), where n is the number of digits in the binary number.
Auxiliary Space: O(1)
Last Updated :
19 Apr, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...