Divide two integers without using multiplication, division and mod operator | Set2
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)
Please Login to comment...