jootiee

Бинарные операции

Nov 24th, 2020 (edited)
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.20 KB | None | 0 0
  1. def choice():
  2.     print('''\n0. Сложение
  3. 1. Вычитание''')
  4.  
  5.     choice = int(input('Выберите операцию (0/1): '))
  6.  
  7.     if choice:
  8.         return 'substraction'
  9.     else:
  10.         return 'addition'
  11.  
  12.  
  13. def numbers_input():
  14.     first = input('Введите первое число: ')
  15.     second = input('Введите второе число: ')
  16.  
  17.     if len(first) > 8 or len(second) > 8:
  18.         return 'stack overflow'
  19.  
  20.     first, second = first.zfill(8), second.zfill(8)
  21.     return first, second
  22.  
  23.  
  24. def addition(first, second):
  25.     fir = list(first)
  26.     sec = list(second)
  27.     overflow = False                    #переменная, отвечающая за переполнение ячейки
  28.  
  29.     for i in range(len(fir) - 1, -1, -1):
  30.        
  31.         if fir[i] == '0':
  32.             if sec[i] == '0':
  33.                 if overflow:
  34.                     fir[i] = '1'
  35.                     overflow = False
  36.                 else:
  37.                     continue
  38.             elif sec[i] == '1':
  39.                 if overflow:
  40.                     fir[i] = '0'
  41.                     overflow = True
  42.                 else:
  43.                     fir[i] = '1'
  44.         elif fir[i] == '1':
  45.             if sec[i] == '0':
  46.                 if overflow:
  47.                     fir[i] = '0'
  48.                     overflow = True
  49.                 else:
  50.                     continue
  51.             elif sec[i] == '1':
  52.                 if i == 0:
  53.                     return 'overflow'
  54.                 if overflow:
  55.                     fir[i] = '1'
  56.                     overflow = True
  57.                 else:
  58.                     fir[i] = '0'
  59.                     overflow = True
  60.  
  61.     return fir
  62.  
  63.  
  64. def substraction(first, second):
  65.     fir = list(first)
  66.     sec = list(second)
  67.     shortage = False                #переменная, отвечающая за заем из старшего разряда
  68.  
  69.     for i in range(len(fir) - 1, -1, -1):
  70.         if fir[i] == '0':
  71.             if sec[i] == '0':
  72.                 continue
  73.             elif sec[i] == '1':
  74.                 if shortage:
  75.                     shortage = True
  76.                     fir[i] = 1
  77.                 else:
  78.                     shortage = True
  79.                     fir[i] = 1
  80.         elif fir[i] == '1':
  81.             if shortage:
  82.                 fir[i] = '0'
  83.                 if sec[i] == '0':
  84.                     shortage = False
  85.                     continue
  86.                 elif sec[i] == '1':
  87.                     fir[i] = '1'
  88.                     shortage = True
  89.             else:
  90.                 if sec[i] == '0':
  91.                     continue
  92.                 elif sec[i] == '1':
  93.                     fir[i] = '0'
  94.                    
  95.     return fir
  96.  
  97.  
  98. def run():
  99.     numbers = numbers_input()
  100.  
  101.     if len(numbers) == 1:
  102.         print('\nstack overflow')
  103.     else:
  104.         first, second = numbers
  105.     if choice() == 'addition':
  106.         summ = addition(first, second)
  107.         if summ == 'overflow':
  108.             print('\nstack overflow')
  109.         else:
  110.             print(*summ, sep='')
  111.     else:
  112.         subs = substraction(first, second)
  113.         print(*subs, sep='')
  114.  
  115.  
  116. if __name__ == "__main__":
  117.     run()
  118.  
Add Comment
Please, Sign In to add comment