public long multiply (int x, int y) {
		long result = 1;
		int xLen = getLength(x);
		int yLen = getLength(y);
		if (xLen == 1 || yLen == 1)
			return x * y;

		int halfX = xLen / 2;
		int halfY = yLen / 2;
		int div = halfX;
		if (halfX > halfY)
			div = halfY;
		int leftX = x / (int) Math.pow(base, div);
		int rightX = x - leftX * (int) Math.pow(base, div);
		
		int leftY = y / (int) Math.pow(base, div);
		int rightY = y - leftY * (int) Math.pow(base, div);

		long a = multiply(leftX, leftY);
		long c = multiply(rightX, rightY);
		long b = multiply(leftX + rightX, leftY + rightY) - a - c;
		result = a * (long) Math.pow(base, 2 * div) +
					b * (long) Math.pow(base, div) + c;
		return result;
	}