 GeeksforGeeks App
Open App Browser
Continue

# 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 ``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

 ``

## Javascript

 ``

Output:

```10 / 5 is equal to : 2
49 / -7 is equal to : -7```

Time complexity: O(1)
Auxiliary space: O(1)

My Personal Notes arrow_drop_up