IntStringMath.java 1.97 KB
public class IntStringMath {


    /**
     * Compute num1 + num2, when num1 and num2 are given as Strings
     * @param num1
     * @param num2
     * @return
     */
    public static String add(String num1, String num2) {
        if (num1.startsWith("-") && num2.startsWith("-")) {
            return "-" + add(num1.substring(1), num2.substring(1));
        } else if (num1.startsWith("-")) {
            return subtract(num2, num1.substring(1));
        } else if (num2.startsWith("-")) {
            return subtract(num1, num2.substring(1));
        }

        String result = "";
        int carry = 0;
        for (int i = num1.length() - 1; i >= 0; i --) {
            int dig = Integer.parseInt(String.valueOf(num1.charAt(i))) + Integer.parseInt(String.valueOf(num2.charAt(i))) + carry;
            carry = dig / 10;
            dig %= 10;
            result = dig + result;
        }
        if (carry != 0) {
            result = carry + result;
        }
        return result;
    }

    /**
     * Compute num1 - num2, when num1 and num2 are given as Strings
     * @param num1
     * @param num2
     * @return
     */
    public static String subtract(String num1, String num2) {
        if (num1.startsWith("-") && num2.startsWith("-")) {
            return subtract(num2.substring(1), num1);
        } else if (num1.startsWith("-")) {
            return add(num1, num2);
        } else if (num2.startsWith("-")) {
            return add(num1, num2);
        }
        String result = "";
        int borrow = 0;
        for (int i = num1.length() - 1; i >= 0; i --) {
            int dig = Integer.parseInt(String.valueOf(num1.charAt(i))) - Integer.parseInt(String.valueOf(num2.charAt(i))) + borrow;
            if (dig < 0) {
                borrow = -1;
            } else {
                borrow = 0;
            }
            dig *= borrow;
            result = dig + result;
        }
        if (borrow != 0) {
            result += "-" + result;
        }
        return result;
    }
}