As homework, I'm implementing Karatsuba's algorithm and benchmarking it against a primary-school-style O(n^2) multiplication algorithm on large integers.
I guessed my only choice here was to bring the numbers to their byte array representations and then work them from there.
Well, I'm stuck here... when using the * operator, I don't know how would I detect/correct if the number overflows a byte multiplication or adds a carry. Any ideas?
public static BigInteger simpleMultiply(BigInteger x, BigInteger y){
        //BigInteger result = x.multiply(y);
        byte [] xByteArray = x.toByteArray();
        byte [] yByteArray = y.toByteArray();
        int resultSize = xByteArray.length*yByteArray.length;
        byte [][] rowsAndColumns = new byte[resultSize][resultSize];
        for (int i =0; i<xByteArray.length;i++)
           for (int j=0; j<yByteArray.length;j++){
               rowsAndColumns[i][j] = (byte )(xByteArray[i] * yByteArray[j]); 
               // how would I detect/handle carry or overflow here?               
           }
        return null;
    }
 
     
     
    