Given two integers say a and b. Find the quotient after dividing a by b without using multiplication, division and mod operator.
Examples:
Input: a = 10, b = 3
Output: 3Input: a = 43, b = -8
Output: -5
This problem has been already discussed here. In this post, a different approach is discussed.
Approach :
- Let a/b = c.
- Take log on both sides
- log(a) – log(b) = log(c)
- Now Log of RHS can be written as exp in LHS
- Final formula is : exp(log(a) – log(b)) = c
Below is the implementation of the above approach:
C++
// C++ program for above approach #include <bits/stdc++.h> using namespace std;
// Returns the quotient of dividend/divisor. void Divide( int a, int b)
{ long long dividend = ( long long )a;
long long divisor = ( long long )b;
// Calculate sign of divisor i.e.,
// sign will be negative only if
// either one of them is negative
// otherwise it will be positive
long long sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1;
// Remove signs of dividend and divisor
dividend = abs (dividend);
divisor = abs (divisor);
// Zero division Exception.
if (divisor == 0) {
cout << "Cannot Divide by 0" << endl;
return ;
}
if (dividend == 0) {
cout << a << " / " << b << " is equal to : "
<< 0 << endl;
return ;
}
if (divisor == 1) {
cout << a << " / " << b << " is equal to : "
<< sign * dividend << endl;
return ;
}
// Using Formula derived above.
cout << a << " / " << b << " is equal to : "
<< sign * exp ( log (dividend) - log (divisor))
<< endl;
} // Drivers code int main()
{ int a = 10, b = 5;
Divide(a, b);
a = 49, b = -7;
Divide(a, b);
return 0;
} |
Java
// Java program for // above approach import java.io.*;
class GFG
{ static void Divide( int a, int b)
{ long dividend = ( long )a;
long divisor = ( long )b;
// Calculate sign of divisor i.e.,
// sign will be negative only if
// either one of them is negative
// otherwise it will be positive
long sign = (dividend < 0 ) ^
(divisor < 0 ) ? - 1 : 1 ;
// Remove signs of
// dividend and divisor
dividend = Math.abs(dividend);
divisor = Math.abs(divisor);
// Zero division Exception.
if (divisor == 0 )
{
System.out.println( "Cannot Divide by 0" );
return ;
}
if (dividend == 0 )
{
System.out.println(a + " / " + b +
" is equal to : " + 0 );
return ;
}
if (divisor == 1 )
{
System.out.println(a + " / " + b +
" is equal to : " +
sign * dividend);
return ;
}
// Using Formula
// derived above.
System.out.println(a + " / " + b + " is equal to : " +
Math.floor(sign *
(Math.exp(Math.log(dividend) -
Math.log(divisor)))));
} // Driver code public static void main (String[] args)
{ int a = 10 , b = 5 ;
Divide(a, b); a = 49 ; b = - 7 ;
Divide(a, b); } } // This code is contributed // by shiv_bhakt. |
Python3
# Python3 program # for above approach import math
def Divide(a, b):
dividend = a;
divisor = b;
# Calculate sign of divisor
# i.e., sign will be negative
# only if either one of them
# is negative otherwise it
# will be positive
sign = - 1 if ((dividend < 0 ) ^
(divisor < 0 )) else 1 ;
# Remove signs of
# dividend and divisor
dividend = abs (dividend);
divisor = abs (divisor);
# Zero division Exception.
if (divisor = = 0 ):
print ( "Cannot Divide by 0" );
if (dividend = = 0 ):
print (a, "/" , b, "is equal to :" , 0 );
if (divisor = = 1 ):
print (a, "/" , b, "is equal to :" ,
(sign * dividend));
# Using Formula
# derived above.
print (a, "/" , b, "is equal to :" ,
math.floor(sign * math.exp(math.log(dividend) -
math.log(divisor))));
# Driver code a = 10 ;
b = 5 ;
Divide(a, b); a = 49 ;
b = - 7 ;
Divide(a, b); # This code is contributed # by mits |
C#
// C# program for // above approach using System;
class GFG
{ static void Divide( int a, int b)
{ long dividend = ( long )a;
long divisor = ( long )b;
// Calculate sign of divisor
// i.e., sign will be negative
// only if either one of them
// is negative otherwise it
// will be positive
long sign = (dividend < 0) ^
(divisor < 0) ? -1 : 1;
// Remove signs of
// dividend and divisor
dividend = Math.Abs(dividend);
divisor = Math.Abs(divisor);
// Zero division Exception.
if (divisor == 0)
{
Console.WriteLine( "Cannot Divide by 0" );
return ;
}
if (dividend == 0)
{
Console.WriteLine(a + " / " + b +
" is equal to : " + 0);
return ;
}
if (divisor == 1)
{
Console.WriteLine(a + " / " + b +
" is equal to : " +
sign * dividend);
return ;
}
// Using Formula
// derived above.
Console.WriteLine(a + " / " + b + " is equal to : " +
Math.Floor(sign *
(Math.Exp(Math.Log(dividend) -
Math.Log(divisor)))));
} // Driver code public static void Main ()
{ int a = 10, b = 5;
Divide(a, b);
a = 49; b = -7;
Divide(a, b);
} } // This code is contributed // by shiv_bhakt. |
PHP
<?php // PHP program for above approach function Divide( $a , $b )
{ $dividend = $a ;
$divisor = $b ;
// Calculate sign of divisor
// i.e., sign will be negative
// only if either one of them
// is negative otherwise it
// will be positive
$sign = ( $dividend < 0) ^
( $divisor < 0) ? -1 : 1;
// Remove signs of
// dividend and divisor
$dividend = abs ( $dividend );
$divisor = abs ( $divisor );
// Zero division Exception.
if ( $divisor == 0)
{
echo "Cannot Divide by 0" ;
echo "" ;
}
if ( $dividend == 0)
{
echo $a , " / " , $b ,
" is equal to : " , 0 ;
echo "" ;
}
if ( $divisor == 1)
{
echo $a , " / " , $b ,
" is equal to : " ,
$sign * $dividend . "\n" ;
echo "" ;
}
// Using Formula
// derived above.
echo $a , " / " , $b ,
" is equal to : " ,
$sign * exp (log( $dividend ) -
log( $divisor )). "\n" ;
echo "" ;
} // Driver code $a = 10;
$b = 5;
Divide( $a , $b );
$a = 49;
$b = -7;
Divide( $a , $b );
// This code is contributed // by shiv_bhakt. ?> |
Javascript
<script> // Javascript program for // above approach function Divide(a, b)
{ var dividend = a;
var divisor = b;
// Calculate sign of divisor i.e.,
// sign will be negative only if
// either one of them is negative
// otherwise it will be positive
var sign = (dividend < 0) ^
(divisor < 0) ? -1 : 1;
// Remove signs of
// dividend and divisor
dividend = Math.abs(dividend);
divisor = Math.abs(divisor);
// Zero division Exception.
if (divisor == 0)
{
document.write( "Cannot Divide by 0" );
return ;
}
if (dividend == 0)
{
document.write(a + " / " + b +
" is equal to : " + 0 + "<br>" );
return ;
}
if (divisor == 1)
{
System.out.println(a + " / " + b +
" is equal to : " +
sign * dividend + "<br>" );
return ;
}
// Using Formula
// derived above.
document.write(a + " / " + b + " is equal to : " +
Math.floor(sign *
(Math.exp(Math.log(dividend) -
Math.log(divisor)))) + "<br>" );
} // Driver Code var a = 10, b = 5;
Divide(a, b); a = 49; b = -7; Divide(a, b); // This code is contributed by Kirti </script> |
Output:
10 / 5 is equal to : 2 49 / -7 is equal to : -7
Time complexity: O(1)
Auxiliary space: O(1)
Article Tags :
Recommended Articles