Advertisement
huyhung94

Nhân - Chia số nguyên

Jan 16th, 2015
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.36 KB | None | 0 0
  1. import math
  2. import os
  3.  
  4. def dec2bin(n):
  5.     k = []
  6.     while n<>0:
  7.         k.insert(0,int(math.fmod(n,2)))
  8.         n = int(n/2)
  9.     return k
  10.  
  11. def bin2dec(k):
  12.     result = 0
  13.     for i in range(len(k)):
  14.         result = result + k.pop() * pow(2,i)
  15.     return result
  16.  
  17. def add(a,b):
  18.     k = []
  19.     nho = 0
  20.     for i in range(len(a)):
  21.         tmp = a[len(a)-i-1] + b[len(b) - i - 1] + nho
  22.         k.insert(0,int(math.fmod(tmp,2)))
  23.         nho = tmp / 2
  24.     return k
  25.  
  26. def addbit(m,q):
  27.     if len(m) > len(q):
  28.         for i in range(len(m) - len(q) +1 ):
  29.             q.insert(0,0)
  30.         m.insert(0,0)
  31.     elif len(m) < len(q):
  32.         for i in range(len(q) - len(m) +1 ):
  33.             m.insert(0,0)
  34.         q.insert(0,0)
  35.     else:
  36.         m.insert(0,0)
  37.         q.insert(0,0)
  38.     return m,q
  39.    
  40. def edit(a,b)
  41.     for i in range(len(a)):
  42.         if a[i] == 0:
  43.             a[i] = 1
  44.         else:
  45.             a[i] = 0
  46.     b[len(a)-1] = 1
  47.     return add(a,b)
  48.    
  49. def shr(a,q,q1):
  50.     a.insert(0,a[0])
  51.     q.insert(0,a.pop())
  52.     q1 = q.pop()
  53.     return a,q,q1
  54.    
  55. def shl(a,q):
  56.     q.insert(len(q),0)
  57.     a.insert(len(a),q.pop(0))
  58.     a.pop(0)
  59.     return a,
  60.    
  61. def mul():
  62.     m, q, a, am_m = [], [], [], []
  63.     so1 = int(raw_input('Nhap so bi nhan = '))
  64.     so2 = int(raw_input('Nhap so nhan = '))
  65.    
  66.     #Chuyen sang so nhi phan   
  67.     m = dec2bin(math.fabs(so1))
  68.     q = dec2bin(math.fabs(so2))
  69.    
  70.     m,q = addbit(m,q)
  71.    
  72.     #A <- 0
  73.     for i in range(len(m)):
  74.         a.insert(0,0)
  75.     n = len(m)
  76.     dem = n
  77.     #Hieu chinh thanh 2 so duong, tim -M
  78.     if so1 >=0 :
  79.         am_m = list(m)
  80.         am_m = edit(am_m,list(a))
  81.     else:
  82.         am_m = list(m)
  83.         m = edit(m,list(a))
  84.     if so2 < 0:
  85.         q = edit(q,list(a))
  86.     q1 = 0
  87.     os.system('cls')
  88.     #============================================#
  89.     print "*"*55
  90.     print "*"," "*51,"*"
  91.     print "*"," "*20,"AT9B - KMA"," "*19,"*"
  92.     print "*"," "*16,"Thuat toan Booth"," "*17,"*"
  93.     print "*"," "*51,"*"
  94.     print "*"*55
  95.     print "\nM = %s\t-M = %s\nQ = %s\n" % (m,am_m,q)
  96.     print "\n    A             Q      Q-1"
  97.     print "%s %s %s    n = %d" % (a,q,q1,n)
  98.     while True:
  99.         if(q[dem-1]==1) and (q1 == 0):
  100.             a = add(a,am_m)
  101.             raw_input()
  102.             print a,q,q1, "   A <- A - M"
  103.         elif (q[dem-1]==0) and (q1==1):
  104.             a = add(a,m)
  105.             raw_input()
  106.             print a,q,q1, "   A <- A + M"
  107.         raw_input
  108.         a,q,q1 = shr(a,q,q1)
  109.         print a, q, q1, "   Dich phai, n=",n-1
  110.         n = n - 1
  111.         if n == 0:
  112.             break      
  113.            
  114.     #Hieu chinh ket qua    
  115.     k = []
  116.     for i in range(len(a)):
  117.         k.append(a[i])
  118.     for i in range(len(q)):
  119.         k.append(q[i])     
  120.     if so1*so2 >0:
  121.         result = bin2dec(k)
  122.         print "====> %d * %d = %d" % (so1,so2,result)
  123.     else:
  124.         tmp = []
  125.         for i in range(2*len(a)):
  126.             tmp.append(0)
  127.         k = edit(k,tmp)
  128.         result = bin2dec(k)
  129.         print "====> %d * %d = -%d" % (so1,so2,result)
  130.     raw_input()
  131.     raw_input()
  132.     main()
  133.  
  134. def div():
  135.     m, q, a, am_m = [], [], [], []
  136.     so1 = math.fabs(int(raw_input('Nhap so bi chia = ')))
  137.     so2 = math.fabs(int(raw_input('Nhap so chia = ')))
  138.     if(so1<so2):
  139.         print "***[ERROR] Try again!***"
  140.         div()
  141.     #Chuyen sang so nhi phan   
  142.     q = dec2bin(so1)
  143.     m = dec2bin(so2)
  144.    
  145.     #A <- 0
  146.     for i in range(len(m)):
  147.         a.insert(0,0)
  148.     n = len(m)
  149.     dem = n
  150.     am_m = edit(list(m),list(a))
  151.     os.system('cls')
  152.     #============================================#
  153.     print "*"*55
  154.     print "*"," "*51,"*"
  155.     print "*"," "*20,"AT9B - KMA"," "*19,"*"
  156.     print "*"," "*13,"Chia so nguyen khong dau"," "*12,"*"
  157.     print "*"," "*51,"*"
  158.     print "*"*55
  159.     print "\nM = %s\t-M = %s\nQ = %s\n" % (m,am_m,q)
  160.     print "\n    A             Q"
  161.     print "%s %s    n = %d" % (a,q,n)
  162.  
  163.     while True:
  164.         raw_input()
  165.         a, q = shl(a,q)
  166.         print a, q, "Dich trai"
  167.         raw_input()
  168.         a = add(a,am_m)
  169.         print a, q, "A = A - M"
  170.         if a[0] == 1:
  171.             q[dem-1] == 0
  172.             a = add(a,m)
  173.             raw_input()
  174.             print a, q, "q[0] = 0, A = A + M, n = ", n-1
  175.         elif a[0] == 0:
  176.             q[dem-1] = 1
  177.             raw_input()
  178.             print a, q, "q[0] = 1, n = ", n-1
  179.         n = n-1
  180.         if n == 0:
  181.             break
  182.     #Hien ket qua
  183.     thuong = bin2dec(q)
  184.     du = bin2dec(a)
  185.     print "===> %d = %d * %d + %d" % (so1,thuong,so2,du)
  186.     raw_input()
  187.     raw_input()
  188.     main()
  189.    
  190. def main():
  191.     os.system('cls')
  192.     os.system('color a')
  193.     print "*"*55
  194.     print "*"," "*51,"*"
  195.     print "*"," "*20,"AT9B - KMA"," "*19,"*"
  196.     print "*"," "*13,"Chia so nguyen khong dau"," "*12,"*"
  197.     print "*"," "*51,"*"
  198.     print "*"*55
  199.     print "\n  1. Nhan so nguyen co dau ( Booth)." 
  200.     print "  2. Chia so nguyen khong dau."
  201.     print "  3. Thoat.\n"
  202.     key = int(raw_input('  Ban chon: '))
  203.     if key ==1:
  204.         mul()
  205.     elif key == 2:
  206.         div()
  207.     elif key == 3:
  208.         return
  209.     else:
  210.         main()
  211. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement