Итак, я хочу запустить алгоритм Карацубы без использования класса BigInteger в Java, поэтому, следуя псевдокоду и этот вопрос, я пришел со следующим кодом
public static long recKaratsuba(long i1, long i2){
if(i1<10 || i2<10) {
return i1*i2 ;
}
long len = Math.round(Long.toString(Math.max(i1,i2)).length());
long N = Math.round(len/2) ;
long b = (long) (i1% Math.pow(10, N)) ;
long a = (long) (i1/ Math.pow(10,N));
long d = (long) (i2% Math.pow(10,N)) ;
long c = (long) (i2/ Math.pow(10,N));
//System.out.println("a,b,c,d :" + a + b + c + d);
long ac = recKaratsuba(a, c) ;
long bd = recKaratsuba(b, d) ;
long pos = recKaratsuba(a+b,c+d) ;
return ((long)(bd + ac*Math.pow(10,len) + (pos -ac -bd)*Math.pow(10,N) )) ;
}
Теперь проблема в том, что он дает неправильный ответ: 1234 * 5678 дает 11686652, что должно было быть 7006652. Как новичок в Java и алгоритмах, я не могу точно определить точную ошибку в этом коде, также я понимаете, что эта программа очень неэффективна и не работает для более чем 4 цифр (согласно связанному вопрос). Но это интуитивно то, что я изначально придумал после изучения псевдокода.
Итак, мой вопрос: в чем проблема в моем коде и как выполнить следующий алгоритм без использования метода BigInteger?