对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。 测试说明 平台会对你编写的代码进行测试: 测试输入:123456789012345678901 + 123 预期输出:123456789012345679024
时间: 2024-03-10 07:48:25 浏览: 45
以下是Python3实现基于字符串的超长整数加减法的代码:
```python
def add(a, b):
carry = 0
c = []
alen, blen = len(a), len(b)
clen = max(alen, blen)
a = '0' * (clen - alen) + a
b = '0' * (clen - blen) + b
for i in range(clen - 1, -1, -1):
ai, bi = int(a[i]), int(b[i])
ci = ai + bi + carry
c.append(str(ci % 10))
carry = ci // 10
if carry:
c.append(str(carry))
return ''.join(c[::-1])
def subtract(a, b):
if a == b:
return '0'
sign = ''
if len(a) < len(b) or (len(a) == len(b) and a < b):
a, b = b, a
sign = '-'
carry = 0
c = []
alen, blen = len(a), len(b)
a = '0' * (alen - blen) + b
b = '0' * (alen - blen) + b
for i in range(alen - 1, -1, -1):
ai, bi = int(a[i]), int(b[i])
ci = ai - bi - carry
if ci < 0:
ci += 10
carry = 1
else:
carry = 0
c.append(str(ci))
while len(c) > 1 and c[-1] == '0':
c.pop()
return sign + ''.join(c[::-1])
a, op, b = input().split()
if op == '+':
print(add(a, b))
elif op == '-':
print(subtract(a, b))
```
代码思路:
1. 读入两个超长整数和运算符。
2. 根据运算符,调用 `add` 函数或 `subtract` 函数计算两个超长整数的加或减,并将结果存储在一个字符串中。
3. 输出结果,处理前导0和负号。
其中,`add` 函数和 `subtract` 函数的思路与C语言版的实现相同。在Python中,我们可以直接使用字符串拼接的方式实现字符串加法,而字符串减法则需要手动实现借位操作。
阅读全文