对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。
时间: 2024-03-16 19:47:54 浏览: 20
好的,我的回答如下:
对于超长整数的加减法运算,我们可以按照竖式计算的方式来实现。具体来说,对于两个超长整数的加法,我们可以从低位到高位逐位相加,并记录进位;对于减法,我们同样从低位到高位逐位相减,并记录借位。最后得到的结果需要反转一下,再去掉前导0。
下面是我的代码实现,你可以参考一下:
```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.append(str(s % 10))
carry = s // 10
i -= 1
j -= 1
if carry:
res.append(str(carry))
res.reverse()
return ''.join(res)
def sub(a, b):
res = []
borrow = 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 - borrow
borrow = 0
if s < 0:
s += 10
borrow = 1
res.append(str(s))
i -= 1
j -= 1
while res and res[-1] == '0':
res.pop()
if not res:
res = ['0']
res.reverse()
return '-' + ''.join(res) if borrow else ''.join(res)
def calc(a, b, op):
if op == '+':
return add(a, b)
elif op == '-':
if len(a) < len(b) or (len(a) == len(b) and a < b):
a, b = b, a
return sub(b, a)
else:
return sub(a, b)
else:
return 'Invalid operator'
a, op, b = input().split()
print(calc(a, b, op))
```
这段代码中,我们定义了三个函数:`add`、`sub`和`calc`。其中,`add`函数实现了超长整数的加法运算,`sub`函数实现了超长整数的减法运算,`calc`函数根据输入的运算符,选择调用`add`还是`sub`函数进行计算,并返回计算结果。
在`add`和`sub`函数中,我们用两个指针i和j分别指向两个超长整数的末尾,然后逐位相加/相减,并记录进位/借位。最后得到的结果需要反转一下,再去掉前导0。在`sub`函数中,如果最后的结果是负数,我们需要在最前面加上负号。
最后,我们在主函数中读入两个超长整数和运算符,调用`calc`函数计算结果并输出即可。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)