割り算の筆算をプログラムしてみた
プログラミングでお遊びします.
小学生の頃にならった割り算の筆算
これをそのままのアルゴリズムでプログラムしていきたいと思います.
こういう系なら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)
よしちゃんとできてる.