В качестве домашнего задания я реализую алгоритм Карацубы и сравниваю его с алгоритмом умножения 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;
}