GoConqr has a new look! Let us know what you think.

Flashcards

Divide Two Integers

Suhas S English 1 card

Cards in this deck (1)

  1. 1Divide Two Integerspublic int divide(int dividend, int divisor) {
    //Reduce the problem to positive long integer to make it easier.
    //Use long to avoid integer overflow cases.
    int sign = 1;
    if ((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0))
    sign = -1;
    long ldividend = Math.abs((long) dividend);
    long ldivisor = Math.abs((long) divisor);
    //Take care the edge cases.
    if (ldivisor == 0) return Integer.MAX_VALUE;
    if ((ldividend == 0) || (ldividend < ldivisor)) return 0;
    long lans = ldivide(ldividend, ldivisor);
    int ans;
    if (lans > Integer.MAX_VALUE){ //Handle overflow.
    ans = (sign == 1)? Integer.MAX_VALUE : Integer.MIN_VALUE;
    } else {
    ans = (int) (sign * lans);
    }
    return ans;
    }
    private long ldivide(long ldividend, long ldivisor) {
    // Recursion exit condition
    if (ldividend < ldivisor) return 0;
    // Find the largest multiple so that (divisor * multiple <= dividend),
    // whereas we are moving with stride 1, 2, 4, 8, 16...2^n for performance reason.
    // Think this as a binary search.
    long sum = ldivisor;
    long multiple = 1;
    while ((sum+sum) <= ldividend) {
    s

Information

Description
Flashcards on Divide Two Integers, created by Suhas S on 18/03/2018.
Created by
Suhas S
Views
0
Rating

Feedback

What is it about?

What do you think of the new look?

How do you like it?