public class Exercise2_10 {

    public int[] A = {1,5,3};
    public int[] B = {1,6,5};
    public int[] result = new int[6];

    public static void main(String[] args) {
        Exercise2_10 obj = new Exercise2_10();
        obj.addTwoNumbers(2);
        System.out.println();
        obj.multiplyTwoNumbers(2);
    }

    // O(N)
    public void addTwoNumbers(int N) {
        int carry = 0;
        for (int i = N; i >= 0; i--) {
            int x = (A[i] + B[i]) + carry;
            carry = x / 10;
            result[i] = x % 10;
        }
        for (int i = 0; i <= N; i++) {
            System.out.print(result[i]);
        }
    }

    // O(N^2)
    public void multiplyTwoNumbers(int N) {
        for (int i = N; i >= 0; i--) {
            for (int j = N; j >= 0; j--) {
                int x = A[j] * B[i];
                result[i + j - 1] += x / 10; // carry
                result[i + j] += x % 10;

                if (result[i + j] >= 10) {
                    result[i + j + 1] += result[i + j] / 10;
                    result[i + j] %= 10;
                }
            }
        }
        for (int i = 0; i <= result.length - 1; i++) {
            System.out.print(result[i]);
        }
    }
}