Multiplication In different Way

package com.kartik;

public class Multiplication {

    public static final long multiplication(int a, int b) {
        long result = ((long) a) * ((long) b);
        return result;
    }

    public static final long multiplyUsingForLoop(int a, int b) {
        int absoluteSecondData = Math.abs(b);
        long result = a;
        for (int i = 1; i < absoluteSecondData; i++) {
            result += a;
        }
        return (b < 0) ? -result : result;
    }

    public static final long multiplyUsingRecursive(int a, int b) {
        int absoluteSecondData = Math.abs(b);
        long result = a;
        if (absoluteSecondData == 1)
            return result;

        result += multiplyUsingRecursive(a, absoluteSecondData - 1);
        return (b < 0) ? -result : result;
    }

    public static final long multiplyUsingShift(int a, int b) {
        int absoluteFirstData = Math.abs(a);
        int absoluteSecondData = Math.abs(b);

        long result = 0L;
        while (absoluteFirstData > 0) {
            if ((absoluteFirstData & 1) > 0)
                result += absoluteSecondData; // Is odd
            absoluteFirstData >>= 1;
            absoluteSecondData <<= 1;
        }

        return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result;
    }

    public static final long multiplyUsingLogirithms(int a, int b) {
        long absoluteFirstData = Math.abs(a);
        long absoluteSecondData = Math.abs(b);
        long result = Math.round(Math.pow(10, (Math.log10(absoluteFirstData) + Math.log10(absoluteSecondData))));
        return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result;
    }
}
Previous
Next Post »