package com.interview.number; public class DivisionWithoutDivisionOperator { public static class Pair { int remainder; int quotient; } public Pair divide(int number, int divisor) { int divident = 0; while (number >= divisor) { number -= divisor; divident++; } Pair p = new Pair(); p.quotient = divident; p.remainder = number; return p; } public int divideRec(int number, int divisor){ if(number < divisor){ return 0; } return divideRec(number-divisor, divisor) + 1; } public Pair efficientDivide(int divident, int divisor) { int quotient = 1; int currentDivisor = divisor; int currentDivident = divident; int q = 0; while (divisor < divident) { currentDivisor = divisor; currentDivident = divident; quotient = 1; while (currentDivisor <= currentDivident) { currentDivisor *= 2; quotient *= 2; } currentDivisor = currentDivisor >> 1; quotient = quotient >> 1; divident = divident - currentDivisor; q += quotient; } Pair p = new Pair(); p.quotient = q; p.remainder = divident; return p; } public int efficientDivideRec(int divident, int divisor){ if(divisor > divident){ return 0; } int tempDivisor = divisor; int quotient = 1; while(divisor <= divident){ divisor = divisor*2; quotient *= 2; } divisor = divisor >> 1; quotient = quotient >> 1; return quotient + efficientDivideRec(divident - divisor, tempDivisor); } public static void main(String args[]) { DivisionWithoutDivisionOperator dd = new DivisionWithoutDivisionOperator(); Pair p = dd.efficientDivide(95,4); System.out.println(p.quotient + " " + p.remainder); System.out.print(dd.efficientDivideRec(135,12)); } }