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

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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.
?>

chevron_right


Output:

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


My Personal Notes arrow_drop_up

A Coding Enthusiast Rails Developer

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Vishal_Khoda, Mithun Kumar