class Main:
def addition(self, num1: int, num2: int):
ans = str(num1 + num2)
s1 = str(num1)
s2 = str(num2)
s2 = "+" + s2
l = max(len(ans), len(s1), len(s2))
ans = " "*(l-len(ans)) + ans
s1 = " "*(l-len(s1)) + s1
s2 = " "*(l-len(s2)) + s2
print(s1)
print(s2)
print("-"*l)
print(ans)
def subtraction(self, num1: int, num2: int):
ans = str(num1 - num2)
s1 = str(num1)
s2 = str(num2)
s2 = "-" + s2
l = max(len(ans), len(s1), len(s2))
ans = " "*(l-len(ans)) + ans
s1 = " "*(l-len(s1)) + s1
s2 = " "*(l-len(s2)) + s2
print(s1)
print(s2)
print("-"*l)
print(ans)
def multiplication(self, num1: int, num2: int):
s1 = str(num1)
s2 = str(num2)
s2 = "*" + s2
n = len(s2)
arr = [0 for i in range(n+2)]
arr[0] = num1
arr[1] = num2
sum = 0
for i in range(n-1,0,-1):
calc = num1*(ord(s2) - ord('0'))
arr[n-i+1] = calc
sum += calc * 10**(n-i-1)
arr[n+1] = sum
l=0
for i in range(n+2):
l = max(l, len(str(arr)))
if len(s1) == 1:
l += 1
print(" "*(l-len(s1)) + s1)
print(" "*(l-len(s2)) + s2)
m = max(len(s1), len(s2))
print(" "*(l - m)+"-"*m)
# if num1 == 0 or (num2==0 and len(s1) == 1):
# l+=1
for i in range(2, n+1):
temp = str(arr)
print(" "*(l-len(temp) - i + 2) + temp)
print("-"*l)
# if num1 == 0:
# l-=1
temp = str(arr[n+1])
print(" "*(l-len(temp)) + temp)
T = int(input())
while T:
T -= 1
s = input()
obj = Main()
if '+' in s:
num1, num2 = s.split("+")
obj.addition(int(num1), int(num2))
if '-' in s:
num1, num2 = s.split("-")
obj.subtraction(int(num1), int(num2))
if '*' in s:
num1, num2 = s.split("*")
obj.multiplication(int(num1), int(num2))
< /code>
Этот код дает неправильный ответ, но я не могу найти неправильные тестовые случаи. Кто -нибудь может объяснить почему? и, возможно, предоставить больше тестовых случаев. Я решил так много случаев края, но все же у него проблемы. Вход (равен около 1000). Это означает количество выражений, которые нужно следовать. Каждое выражение состоит из одной линии, содержащей положительное целое число, оператор (один из +, - и *) и второго положительного целого числа. Каждый номер имеет не более 500 цифр. На линии нет мест. Если операция вычитается, второе число всегда ниже, чем первое. Никакое число не начнется с нуля. < /P>
формат вывода: < /strong>
Для каждого выражения печатайте две строки с двумя заданными числами, второе число ниже первого Одна, последние цифры (представляющие единства) должны быть выровнены в том же столбце. Поместите оператора прямо перед первой цифрой второго номера. После второго номера должна быть горизонтальная линия, сделанная из тире (-). < /P>
Для каждого добавления или вычитания поместите результат прямо под горизонтальной линией, с последней цифрой, выровненной с Последняя цифра обоих операндов. < /p>
Для каждого умножения умножьте первое число на каждую цифру второго номера. Поместите частичные результаты один ниже другого, начиная с продукта последней цифры второго числа. Каждый частичный результат должен быть выровнен с соответствующей цифрой. Это означает, что последняя цифра частичного продукта должна находиться в том же столбце, что и цифра второго числа. Ни один продукт не может начаться с каких -либо дополнительных нулей. Если конкретная цифра равна нулю, продукт имеет ровно одну цифру - ноль. Если второе число имеет более одной цифры, распечатайте другую горизонтальную линию под частичными результатами, а затем распечатайте их. , относительно других ограничений. Горизонтальная линия всегда столько, сколько необходимо, чтобы достичь левого и правого конца обоих чисел (и операторов) непосредственно и над ней. Это означает, что он начинается в том же столбце, где самая левая цифра или оператор этих двух линий (одна ниже и одна выше). Он заканчивается в столбце, где самая правая цифра этих двух чисел. Линия не может быть ни дольше, ни короче указанной. Ссылка на вопрос: https://www.spoj.com/problems/arith/cstart=30
Подробнее здесь: https://stackoverflow.com/questions/793 ... ong-answer
Spoj: Простая арифметика (арита), давая неправильный ответ ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как преобразовать программу C++, генерирующую палиндромы, в ассемблер для SPOJ?
Anonymous » » в форуме C++ - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-