private String multiply(String num1, String num2, int start1, int end1, int start2, int end2) {
        if (end1 - start1 == 0 || end2 - start2 == 0) {
            return simpleMultiply(num1.substring(start1, end1 + 1), num2.substring(start2, end2 + 1));
        }

        int mid1 = (start1 + end1)/2;
        int mid2 = (start2 + end2)/2;

        int count1 = end1 - mid1;
        int count2 = end2 - mid2;

        String v1 = multiply(num1, num2, start1, mid1, start2, mid2);
        String v2 = multiply(num1, num2, start1, mid1, mid2 + 1, end2);
        String v3 = multiply(num1, num2, mid1 + 1, end1, start2, mid2);
        String v4 = multiply(num1, num2, mid1 + 1, end1, mid2 + 1, end2);

        v1 = append0s(v1, count1 + count2);
        v2 = append0s(v2, count1);
        v3 = append0s(v3, count2);

        v1 = add(v1.toCharArray(), v2.toCharArray());
        v3 = add(v3.toCharArray(), v4.toCharArray());
        return add(v1.toCharArray(), v3.toCharArray());
    }
https://leetcode.com/discuss/questions/oj/multiply-strings
src/com/interview/string/MultiplyStrings.java