大変なことになってしまった
- ざっくり言ってしまえば、割り算の筆算を2進数でやっている
- qは現時点で埋まった解答
x - 2 * q * y
は、x - 今までの計算で引いてきた値を合計したやつ
- 表の4段目の状態だと、qは10で、ここまで引いてきた値の合計は
10 * 110000000
+0 * 110000000
であらわせる(3段目の2つの★)- これが
2 * q * y
- 1つ前の表で計算した
y * q
をする必要があって桁を上げるために* 2
している(4段目であればq2 * y2
をしたいが、この時点でyはy3なのでy2に戻している
- 1つ前の表で計算した
- これが
x - 2 * q * y < y
の場合、今の桁の解答を1にして次の桁に進む(これが2 * q + 1
の+1
)- 結果、次の計算のqは101になる(最後の1が
+1
の1)
- 結果、次の計算のqは101になる(最後の1が
おんなじようなことを10進数でやるとこんな感じになる
function devide(x:number, y:number, d:number):number { if(y > x) return 0 let q = devide(x, 10 * y, d * 10) var i = 9 if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } i-- if(y * i <= x - (q * y)) { return i * d + q } return q }