Figure 2: Pseudocode to divide two BigNums
div(BigNum a, b, q, remainder){
int position =q.exp=a.exp-b.exp;
int qGuess //will hold a single digit of q
int m = b.exp;
x = a.exp - m;
while(a>b && x>=0){
//let atemp be the m leading digits of a
atemp = a[a.exp..x]
//make a guess at a digit of q
qGuess = guess(aTemp, b)
aTemp = aTemp - qGuess*b;
while(aTemp is negative){
//we've subtracted too much;
//fix qGuess and adjust atemp
qGuess--;
aTemp += b;
}
//we've found a digit of q
q[position--] = qGuess;
//replace leading m digits of a
//with atemp and note a.exp
//may be 0 and will need to be adjusted
a[a.exp..a.exp-m] = aTemp
while(!a.n[a.exp])a.exp--;
x--;
//loop until all digits of q are found
}
remainder = a
}