Division of two number without using '/' operator

Write a program to Division of two number without using '/' operator

Example 1:

Input:a=15,b=-5
Output:-3

Approach 1: Iterative 

Java

public class DivisionTwoNumber {
    public static void main(String[] args) {
        int dividend = -15;
        int divisor = 5;
        int quotient = divideTwo(dividend, divisor);
        System.out.println("Quotient is " + quotient);
    }

    // iterative approach
    private static int divideTwo(int dividendint divisor) {
        int quotient = 0;
        // if divisor=0 then
        if (divisor == 0)
            return 0;

        int sign = 1// plus sign
        // check negative sign
        if (dividend * divisor < 0) {
            sign = -1;
        }
        // convert value into positive
        dividend = Math.abs(dividend);
        divisor = Math.abs(divisor);
        // iterate untill dividend>=divisor
        while (dividend >= divisor) {
            dividend = dividend - divisor;
            quotient++;
        }

        return quotient * sign;
    }
}

C++

#include <bits/stdc++.h>
using namespace std;


// function to divide the number
int divideTwo(int dividendint divisor
{
   int quotient = 0;
  // if divisor=0 then
  if (divisor == 0)
      return 0;

  int sign = 1; // plus sign
  // check negative sign
   if (dividend * divisor < 0
    {
            sign = -1;
        
    }
 // convert value into positive
  dividend = abs(dividend);
  divisor=abs(divisor);
  // iterate untill dividend>=divisor
  while (dividend >= divisor) {
       dividend = dividend - divisor;
       quotient++;
   }

  return quotient * sign;
}
int main()
{
    int dividend = -15;
    int divisor = 5;
    int quotient = divideTwo(dividenddivisor);
    cout<<"Quotient is "<<quotient;
}


Approach 2: Recurring

Java

public class DivisionTwoNumber {
    public static void main(String[] args) {
        int dividend = -15;
        int divisor = 5;
        System.out.println("Quotient is " + 
        divideTwoRec(dividend, divisor));
    }

// using recurring
    private static int divideTwoRec(int aint b) {
        // if b=0 then
        if (b == 0)
            return 0;

        int sign = 1;
        // check for negative
        if (a * b < 0)
            sign = -1;
        // convert into positive
        a = Math.abs(a);
        b = Math.abs(b);
        // base condition
        if (a < b) {
            return 0;
        }
        // call recurring method
        return sign * (1 + divideTwoRec(a - b, b));
    }

}

C++

#include <bits/stdc++.h>
using namespace  std;

// using recurring
int divideTwoRec(int aint b)
{
  // if b=0 then
   if (b == 0)
      return 0;

  int sign = 1;
  // check for negative
   if (a * b < 0)
      sign = -1;
   // convert into positive
   a = abs(a);
   b = abs(b);
   // base condition
        if (a < b) {
            return 0;
        }
   // call recurring method
    return sign * (1 + divideTwoRec(a - bb));
}

int main()
{
    int dividend = -15;
    int divisor = 5;
    int quotient = divideTwoRec(dividenddivisor);
    cout<<"Quotient is "<<quotient;
}

Approach 3: Bit Manipulation

Java

public class DivisionTwoNumber {
    public static void main(String[] args) {
        int dividend = -15;
        int divisor = 5;
        int sign = 1;
        if (dividend * divisor < 0) {
            sign = -1;

        }
        dividend = Math.abs(dividend);
        divisor = Math.abs(divisor);
        int quot = sign * divideTwoUsingBit(dividend, divisor);
        System.out.println("Quotient is " + quot);
    }


    // Using bit manipulation
    private static int divideTwoUsingBit(int dividend,
                     int divisor) {
        // hold for perform operation
        int denom = divisor;
        int current = 1;
        int answer = 0;

        // base case
        if (denom > dividend)
            return 0;
        // base case
        if (denom == dividend)
            return 1;

        // Left shift untill denom <=dividend
        while (denom <= dividend) {
            // one left shift
            denom <<= 1;
            current <<= 1;
        }
        // one right shift
        denom >>= 1;
        current >>= 1;
        // iterate untill current!=0
        while (current != 0) {
            if (dividend >= denom) {
                dividend = dividend - denom;
                // XOR
                answer = answer | current;
            }
            // right shift
            current >>= 1;
            denom >>= 1;
        }
        return answer;
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

// Using bit manipulation
int divideTwoUsingBit(int dividend,
                     int divisor)
{
    // hold for perform operation
    int denom = divisor;
    int current = 1;
   int answer = 0;
   
    // base case
    if (denom > dividend)
         return 0;
   // base case
    if (denom == dividend)
            return 1;

   // Left shift untill denom <=dividend
        while (denom <= dividend) {
            // one left shift
            denom <<= 1;
            current <<= 1;
     }
     // one right shift
    denom >>= 1;
    current >>= 1;
    // iterate untill current!=0
    while (current != 0) {
        if (dividend >= denom) {
                dividend = dividend - denom;
                // XOR
                answer = answer | current;
            }
        // right shift
            current >>= 1;
            denom >>= 1;
    }
        return answer;
}

int main()
{
    int dividend = -15;
    int divisor = 5;
    int sign = 1;
    if (dividend * divisor < 0) {
            sign = -1;

      }
  dividend =abs(dividend);
  divisor =abs(divisor);
  int quot = sign * divideTwoUsingBit(dividenddivisor);
  cout<<"Quotient is "<< quot;
  return 0;

}


No comments:

Post a Comment