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: 3

Input: a = 43, b = -8
Output: -5

 

This problem has been already discussed here. In this post, a different approach is discussed.
Approach : 

  1. Let a/b = c.
  2. Take log on both sides
  3. log(a) – log(b) = log(c)
  4. Now Log of RHS can be written as exp in LHS
  5. 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)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Check Also
Close
Back to top button