Есть способ сделать это, не прибегая также к произвольной арифметике. Если вы не пишете код на ассемблере, это скорее любопытство, чем полезный алгоритм, но, возможно, стоит упомянуть.
int dividend = 0;
int result = 0;
int remainder = 0;
while( num != 0 ) {
boolean bit = <take the topmost bit of num>
dividend = remainder << 1;
if( bit ) {
dividend += whole;
}
int quotient = dividend / div;
result = (result << 1) + quotient;
remainder = dividend % div;
num = num << 1;
}
result <<= 1;
result += ( remainder << 1 ) / div;
Я знаю, что цикл неуклюжий, но мой разум пуст, и я не могу перефразировать его так, чтобы все в него аккуратно вписалось, но вы должны понять общую идею, которая заключается в том, чтобы выполнять умножение по крупицам, пока вы делает разделение.