对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。
时间: 2024-03-07 08:46:49 浏览: 72
超长整数加减
好的,这是一个常见的问题。我可以为您提供一个基于Python的解决方案,使用字符串来表示超长整数,实现加法和减法运算。
首先,我们需要定义一个函数来实现字符串相加:
```python
def addStrings(num1: str, num2: str) -> str:
res = ""
carry = 0
i, j = len(num1) - 1, len(num2) - 1
while i >= 0 or j >= 0:
n1 = int(num1[i]) if i >= 0 else 0
n2 = int(num2[j]) if j >= 0 else 0
tmp = n1 + n2 + carry
carry = tmp // 10
res = str(tmp % 10) + res
i, j = i - 1, j - 1
if carry:
res = "1" + res
return res
```
这个函数接受两个字符串参数,返回它们的和。我们使用两个指针 i 和 j 分别指向两个字符串的末尾,从右往左依次相加,同时记录进位。最后如果还有进位,需要在最高位加上 1。
接下来,我们定义一个函数来实现字符串相减:
```python
def subStrings(num1: str, num2: str) -> str:
res = ""
borrow = 0
i, j = len(num1) - 1, len(num2) - 1
while i >= 0 or j >= 0:
n1 = int(num1[i]) if i >= 0 else 0
n2 = int(num2[j]) if j >= 0 else 0
tmp = n1 - n2 - borrow
if tmp < 0:
tmp += 10
borrow = 1
else:
borrow = 0
res = str(tmp) + res
i, j = i - 1, j - 1
return res.lstrip("0") or "0"
```
这个函数接受两个字符串参数,返回它们的差。我们也使用两个指针 i 和 j 分别指向两个字符串的末尾,从右往左依次相减,同时记录借位。需要注意,如果被减数小于减数,需要向高位借位,这个时候需要加上 10。
最后,我们可以编写一个主函数来调用这两个函数,实现加法和减法运算:
```python
if __name__ == "__main__":
num1 = input().strip()
num2 = input().strip()
op = input().strip()
if op == "+":
print(addStrings(num1, num2))
elif op == "-":
print(subStrings(num1, num2))
```
这个主函数读入两个字符串和一个运算符,根据运算符选择调用 addStrings 或 subStrings 函数,并打印结果。
希望这个解决方案能够解决您的问题!
阅读全文