Реализация умножения BigInteger ... с нуля (и проверка O (n ^ 2))

В качестве домашнего задания я реализую алгоритм Карацубы и сравниваю его с алгоритмом умножения O (n ^ 2) в стиле начальной школы на большие целые числа.

Я подумал, что мой единственный выход здесь - это привести числа к их представлениям в виде байтовых массивов, а затем обработать их оттуда.

Ну, я застрял здесь ... при использовании оператора * я не знаю, как мне определить / исправить, если число выходит за пределы умножения байтов или добавляет перенос. Есть идеи?

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;
    }
5
задан Bill the Lizard 26 September 2012 в 00:03
поделиться