酷代码 AI
菜单

【基础】高精度减法3 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 16MB,其他语言 32MB 难度:GESP4+/普及- 分数:0 OI排行榜得分:12(0.1*分数+2*难度) 出题人: 描述 处理两个高精度数的减法。(1000位内) 输入描述 两行,每行一个整数。(可能为负数,负号用“-”表示) 输出描述 一个整数,即两个数相减的结果。 用例输入 1 2345678901234 *********012345 用例输出 1 -121111110111111 提示 注意:输入的数可能是负数! 来源 高精度算法

以下是用Python实现高精度减法的代码: ```python # 定义高精度减法函数 def high_precision_subtraction(num1, num2): # 判断两个数的正负情况 if num1[0] == '-' and num2[0] != '-': # 若 num1 为负,num2 为正,结果为 -(abs(num1) + num2) return '-' + str(int(num1[1:]) + int(num2)) elif num1[0] != '-' and num2[0] == '-': # 若 num1 为正,num2 为负,结果为 num1 + abs(num2) return str(int(num1) + int(num2[1:])) elif num1[0] == '-' and num2[0] == '-': # 若 num1 和 num2 都为负,结果为 abs(num2) - abs(num1) num1 = num1[1:] num2 = num2[1:] # 判断绝对值大小 if len(num1) < len(num2) or (len(num1) == len(num2) and num1 < num2): # 若 num1 的绝对值小于 num2 的绝对值,结果为负,交换并相减 return '-' + high_precision_subtraction(num2, num1) # 初始化结果列表 result = [] carry = 0 # 从右向左逐位相减 i, j = len(num1) - 1, len(num2) - 1 while i >= 0 or j >= 0: digit1 = int(num1[i]) if i >= 0 else 0 digit2 = int(num2[j]) if j >= 0 else 0 # 计算当前位的差值 diff = digit1 - digit2 - carry if diff < 0: # 若差值为负,借位 diff += 10 carry = 1 else: carry = 0 # 将当前位的结果添加到结果列表中 result.append(str(diff)) i -= 1 j -= 1 # 去除前导零 while len(result) > 1 and result[-1] == '0': result.pop() # 将结果列表反转并拼接成字符串 return ''.join(result[::-1]) # 读取输入 num1 = input().strip() num2 = input().strip() # 进行减法运算 answer = high_precision_subtraction(num1, num2) # 输出结果 print(answer) ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 正负号的处理,不同的正负情况会导致不同的计算逻辑。 2. 处理借位时要正确更新借位标志,避免计算错误。 3. 减法结果可能会出现前导零,需要正确去除。 [2026-01-03 18:40:48 | AI写代码神器 | 687点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多