对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。
时间: 2024-03-14 22:48:05 浏览: 51
超长整数的处理
5星 · 资源好评率100%
好的,我明白了。这是一个很常见的问题。我可以为你提供一个 Python 的解决方案。
加法:
```python
def add(num1, num2):
# 将两个数字用 0 补齐,使它们的长度一致
max_len = max(len(num1), len(num2))
num1 = num1.zfill(max_len)
num2 = num2.zfill(max_len)
# 从低位到高位,逐位计算相加结果
result = []
carry = 0
for i in range(max_len - 1, -1, -1):
sum = int(num1[i]) + int(num2[i]) + carry
carry = sum // 10
result.append(str(sum % 10))
if carry:
result.append(str(carry))
# 将计算结果翻转并连接成字符串
result.reverse()
return ''.join(result)
```
减法:
```python
def sub(num1, num2):
# 将两个数字用 0 补齐,使它们的长度一致
max_len = max(len(num1), len(num2))
num1 = num1.zfill(max_len)
num2 = num2.zfill(max_len)
# 如果 num1 < num2,则交换 num1 和 num2
if num1 < num2:
num1, num2 = num2, num1
sign = '-'
else:
sign = ''
# 从低位到高位,逐位计算相减结果
result = []
borrow = 0
for i in range(max_len - 1, -1, -1):
diff = int(num1[i]) - int(num2[i]) - borrow
if diff < 0:
diff += 10
borrow = 1
else:
borrow = 0
result.append(str(diff))
# 去掉前导 0
while len(result) > 1 and result[-1] == '0':
result.pop()
# 将计算结果翻转并连接成字符串
result.reverse()
return sign + ''.join(result)
```
你可以将这两个函数加入到你的代码中,然后根据输入的运算符调用相应的函数,输出计算结果即可。
阅读全文