对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。
时间: 2024-03-15 13:44:16 浏览: 65
下面是Python的实现代码:
```
def add(a, b):
res = ''
carry = 0
i, j = len(a) - 1, len(b) - 1
while i >= 0 or j >= 0:
x = int(a[i]) if i >= 0 else 0
y = int(b[j]) if j >= 0 else 0
s = x + y + carry
res = str(s % 10) + res
carry = s // 10
i -= 1
j -= 1
if carry:
res = str(carry) + res
return res
def subtract(a, b):
if len(a) < len(b) or (len(a) == len(b) and a < b):
a, b = b, a
sign = '-'
else:
sign = ''
res = ''
carry = 0
i, j = len(a) - 1, len(b) - 1
while i >= 0 or j >= 0:
x = int(a[i]) if i >= 0 else 0
y = int(b[j]) if j >= 0 else 0
s = x - y - carry
if s < 0:
s += 10
carry = 1
else:
carry = 0
res = str(s) + res
i -= 1
j -= 1
res = sign + res.lstrip('0')
return res
a, op, b = input().split()
if op == '+':
print(add(a, b))
else:
print(subtract(a, b))
```
这个程序中,我们定义了两个函数,分别实现加法和减法。在加法函数中,我们从低位开始逐位相加,如果有进位就记录下来,最后将结果反转输出。在减法函数中,我们先判断被减数和减数的大小,然后从低位开始逐位相减,如果需要借位就记录下来,最后添加符号并去掉前导0输出。最后,我们读入两个超长整数和运算符,根据运算符选择相应的函数输出结果。
阅读全文