Число 113: для него прямой, обратный и дополнительный коды совпадают, так как оно положительное.
113(10)=01110001(2)
Число (-36):
Прямой код: 36(10)=00100100(2)
Обратный код (код, в котором меняем 0 на 1, а 1 на 0 в прямом коде):
-36(10) - обратный код 11011011(2)
Дополнительный код (к младшему разряду обратного кода прибавляем 1):
-36(10) - дополнительный код 11011100(2) - это число -36 в доп.коде
Сложим 113+(-36) в двоичных кодах:
01110001(2)+11011100(2)=1 0100 1101(2). Старшую единицу отбрасываем, получаем:
01001101(2)=77(10)
Проверим: 113-36=77 в десятичной с/с
class WordConstructor:
def __init__(self, number):
self.number = number
def vocab(self, number, args=None):
if number == 1:
return "Один"
elif number == 0:
return "Ноль"
elif number == 2 and args:
return "Две"
elif number == 2:
return "Два"
elif number == 3:
return "Три"
elif number == 4 and args:
return "Четыр"
elif number == 4:
return "Четыре"
elif number == 5:
return "Пять"
elif number == 6:
return "Шесть"
elif number == 7:
return "Семь"
elif number == 8:
return "Восемь"
elif number == 9:
return "Девять"
elif number == 10:
return "Десять"
elif number == 11:
return "Одиннадцать"
elif number == 12:
return "Двенадцать"
elif number == 'suf.nadcat':
return "надцать"
elif number == 'suf.dcat':
return "дцать"
elif number == "suf.yat":
return "десят"
elif number == "suf.ok":
return "ок"
elif number == 90:
return "Девяносто"
elif number == 100:
return "Сто"
elif number == 'suf.sot':
return "сот"
def get_num_from_number(self, number, pos):
return int(str(number)[pos])
def construct(self):
if self.number < 13:
print(self.vocab(self.number))
elif self.number < 20:
if self.number == 14:
print(self.vocab(int(str(self.number)[1]), args=True) + self.vocab("suf.nadcat"))
else:
print(self.vocab(int(str(self.number)[1]), args=True).replace("ь", "") + self.vocab("suf.nadcat"))
elif self.number < 100:
first = self.get_num_from_number(self.number, 0)
second = self.get_num_from_number(self.number, 1)
if second == 0:
if first == 4:
print("Сор" + self.vocab("suf.ok"))
elif first < 5:
print(self.vocab(first, args=True) + self.vocab("suf.dcat"))
elif first < 9:
print(self.vocab(first) + self.vocab("suf.yat"))
elif first == 9:
print(self.vocab(self.number))
else:
print(self.vocab(first, args=True) + self.vocab("suf.dcat"))
else:
if first == 4:
print("Сор" + self.vocab("suf.ok") + " " + self.vocab(second).lower())
elif first < 5:
print(self.vocab(first, args=True) + self.vocab("suf.dcat") + " " + self.vocab(second).lower())
elif first < 9:
print(self.vocab(first) + self.vocab("suf.yat") + " " + self.vocab(second).lower())
elif first == 9:
print(self.vocab(self.number - second) + " " + self.vocab(second).lower())
else:
print(self.vocab(first, args=True) + self.vocab("suf.dcat") + " " + self.vocab(second).lower())
elif self.number < 1000:
zero = self.get_num_from_number(self.number, 0)
first = self.get_num_from_number(self.number, 1)
second = self.get_num_from_number(self.number, 2)
if second == 0 and first == 0:
if zero == 4:
print(self.vocab(zero) + self.vocab(100).lower())
elif zero == 2:
print("Двести")
elif zero == 3:
print(self.vocab(zero) + self.vocab(100).lower().replace("о", "а"))
elif zero == 1:
print(self.vocab(100))
elif zero <= 9:
print(self.vocab(zero) + self.vocab('suf.sot').lower())
for i in range(0, 1000):
a = WordConstructor(i)
a.construct()
Код очень нетривиален и не оптимизорован. Работает с 0-100 числами и может еще 200, 300...
Дальше с >100 писать мне очень лень, уж простите.