Implement *, -, and / operators using only +

Problem

Write a method to implement *, – , / operations You should use only the + operator.

Solution
IF we have 2 numbers a, b

  • a * b can be implemented as adding a for b times.Take care of overflow as a*b may result in overflow.
  • a – b can be implemented as addition of a and -b.
  • a / b can be implemented as finding how many times you need to add b, until getting a.

 Here is the solution in java:

public static int negate(int number) {  
    return ~number + 1;  
}  
   
public static int abs(int number) {  
    return number < 0 ? negate(number) : number;  
}  
   
public static int multiply(int a, int b) {  
    int multiplier = Math.min(abs(a), abs(b));  
    int multiplicant = (multiplier == abs(a) ? abs(b) : abs(a));  
    if(multiplier==0 || multiplicant==0)  
        return 0;  
    int result = 0;  
    for (int i = 0; i < multiplier; i = i + 1) {  
        long holdResult = result+multiplicant;  
        if(holdResult>Integer.MAX)  
            throw new java.lang.ArithematicException("Overflow in integer");  
        result = (int)holdResult;  
    }  
    if (abs(a) == a) { // a >= 0  
        if (abs(b) == b) // b >= 0  
            return result;  
        else  
            // b < 0;  
            return negate(result);  
    } else { // a < 0  
        if (abs(b) == b) // b >= 0  
            return negate(result);  
        else  
            // b < 0;  
            return result;  
    }  
}  
   
public static int substract(int a, int b) {  
    return a + negate(b);  
}  
   
public static int divide(int a, int b) {  
    if (b == 0) {  
        throw new java.lang.ArithmeticException("Divide by 0.");  
    }  
   
    int divident = abs(a);  
    int divisor = abs(b);  
    int quotient = 0;  
   
    while (divident >= divisor) {  
        divident = substract(divident, divisor);  
        quotient = quotient + 1;  
    }  
   
    if (abs(a) == a) { // a >= 0  
        if (abs(b) == b) // b >= 0  
            return quotient;  
        else  
            // b < 0;  
            return negate(quotient);  
    } else { // a < 0  
        if (abs(b) == b) // b >= 0  
            return negate(quotient);  
        else  
            // b < 0;  
            return quotient;  
    }  
}  

Thanks.


See also