割り算の筆算をプログラムしてみた

プログラミングでお遊びします.

小学生の頃にならった割り算の筆算

f:id:mashiroyuya:20160322194533j:plain

これをそのままのアルゴリズムでプログラムしていきたいと思います.

こういう系ならCで組んだ方が慣れている気がするのですが練習を兼ねてpythonで書きます.

#coding: UTF-8
# a / b = c ... d

# input and initialize *********************
#割られる数
print "input dividend"
dividend = raw_input() #のちに a

#割る数
print "input divisor"
divisor = raw_input() #のちに b

#桁数
alen = len(dividend)
blen = len(divisor)

#dividendを各桁に分ける.
astr = [dividend[i] for i in range(0, len(dividend))]
a = map(int,astr)
anum = int(dividend)
b = int(divisor)
a.append(0) #43 -> 43.0 と表記してると思えば良い.
#筆算で最後に小数点第1位から0を下ろすのに使う.

# calicurate ******************************
#aの頭からbのケタ数のところを取る.
aa = int(anum * 10**(blen - alen))
keta = blen
quot = 0
for j in range(alen):
    i = 0
    #bを何倍したらaaを超えるかを探す.
    while b * i <= aa:
        i += 1
    quot = quot*10 + i-1
    aa_next = aa - b * (i-1)

    if keta > alen - 1:
        aa = aa_next
        break
    aa = aa_next * 10 + a[keta]
    keta += 1

# output *************************************
print "quotient = %s , remainder = %s" % (quot,aa)

f:id:mashiroyuya:20160322194640p:plain

よしちゃんとできてる.