Open In App

Divide two integers without using multiplication, division and mod operator | Set2

Improve
Improve
Like Article
Like
Save
Share
Report

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)



Last Updated : 19 Oct, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads