编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。
时间: 2024-03-17 22:46:13 浏览: 95
好的,以下是基于 Python 语言实现的代码,可以实现超长整数的加法和减法运算:
```python
def remove_leading_zeros(num_str):
"""去除字符串前导0"""
num_str = num_str.lstrip('0')
if not num_str:
return '0'
else:
return num_str
def add(num1, num2):
"""超长整数加法"""
# 先把两个数对齐
len1, len2 = len(num1), len(num2)
if len1 > len2:
num2 = '0' * (len1 - len2) + num2
elif len1 < len2:
num1 = '0' * (len2 - len1) + num1
# 从低位向高位按位相加
carry = 0 # 进位
res = []
for i in range(len(num1)-1, -1, -1):
n1, n2 = int(num1[i]), int(num2[i])
s = n1 + n2 + carry
carry = s // 10
res.append(str(s % 10))
if carry:
res.append(str(carry))
# 把结果反转并转成字符串
return ''.join(res[::-1])
def sub(num1, num2):
"""超长整数减法"""
# 先比较被减数和减数的大小,如果被减数小于减数,则交换被减数和减数,并加上负号
if num1 < num2:
num1, num2 = num2, num1
sign = '-'
else:
sign = ''
# 先把两个数对齐
len1, len2 = len(num1), len(num2)
if len1 > len2:
num2 = '0' * (len1 - len2) + num2
elif len1 < len2:
num1 = '0' * (len2 - len1) + num1
# 从低位向高位按位相减
borrow = 0 # 借位
res = []
for i in range(len(num1)-1, -1, -1):
n1, n2 = int(num1[i]), int(num2[i])
s = n1 - n2 - borrow
if s < 0:
s += 10
borrow = 1
else:
borrow = 0
res.append(str(s))
# 去除结果前导0并加上负号(如果有的话)
res_str = ''.join(res[::-1])
res_str = remove_leading_zeros(res_str)
return sign + res_str
def calc():
"""计算超长整数表达式"""
num1 = input("请输入第一个超长整数:")
num2 = input("请输入第二个超长整数:")
op = input("请输入运算符(+或-):")
if op == '+':
res = add(num1, num2)
elif op == '-':
res = sub(num1, num2)
else:
print("不支持的运算符")
return
print("运算结果:", res)
calc()
```
该程序首先定义了三个函数:`remove_leading_zeros`、`add`、`sub`。其中 `remove_leading_zeros` 函数用于去除字符串的前导0,`add` 函数实现超长整数的加法运算,`sub` 函数实现超长整数的减法运算。
最后定义了一个 `calc` 函数,用于获取用户输入的超长整数表达式,并计算出运算结果。
运行程序后,用户需要依次输入两个超长整数和运算符。程序会根据运算符调用 `add` 或 `sub` 函数进行计算,并输出运算结果。
阅读全文