对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。
时间: 2024-04-23 11:24:00 浏览: 7
好的,我已经了解了你的问题。针对这个问题,我可以给你提供一种解法:
首先,将输入的两个超长整数用字符串存储,然后将其反转,方便从低位到高位进行计算。
对于加法运算,我们可以逐位相加,进位则将进位标志设为1,不进位则设为0,最终得到结果后再将其反转输出即可。
对于减法运算,我们可以先判断两个数的大小关系,并将较大的数减去较小的数。在减法运算的过程中,如果有借位,则将借位标志设为-1,否则设为0。最终得到结果后,如果结果为负数,则在前面加上负号。最后将结果反转输出即可。
下面是实现这个算法的 Python 代码:
相关问题
对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。
好的,这是一个常见的问题。我可以为您提供一个基于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 函数,并打印结果。
希望这个解决方案能够解决您的问题!
任务描述 对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字
符串来表示超长整数。现在给定两个超长整数,请编写一个函数计算它们的和。
函数原型:string AddLongInteger(string & addend,string & augend);
输入参数:
addend:加数,字符串类型,长度不超过1000。
augend:被加数,字符串类型,长度不超过1000。
输出参数:
返回值:字符串类型,表示两个超长整数的和。
示例:
输入:
"1","99"
输出:
"100"
输入:
"99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999","1"
输出:
"100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"