Skip to content
Related Articles

Related Articles

Divide two integers without using multiplication, division and mod operator | Set2
  • Last Updated : 13 Aug, 2018
GeeksforGeeks - Summer Carnival Banner

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++




// 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.
?>
Output:
10 / 5 is equal to : 2
49 / -7 is equal to : -7
Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.



My Personal Notes arrow_drop_up
Recommended Articles
Page :