Python中利用ASCII码实现字符串数字相加并返回字符串
用ASCII码实现字符串数字相加的Python方案
需求很明确:接收两个字符串格式的数字(支持多位数),通过ASCII码转换完成加法运算,最终返回字符串结果。
先纠正一个常见错误
你提供的示例里直接对多位数字符串调用ord()是行不通的——ord()只能处理单个字符,对'11'这类字符串调用会报错。正确的做法是逐位处理字符串中的每个数字字符,利用ASCII码的特性完成数值转换。
实现思路
- 数字字符的ASCII码是连续的:
'0'对应48,'1'对应49,以此类推。所以单个数字字符转整数可以用ord(char) - ord('0')。 - 模拟手工加法的逻辑:从两个字符串的末尾(最低位)开始逐位相加,处理进位。
- 将计算得到的每一位整数再转回字符(
chr(digit + ord('0'))),最后拼接成结果字符串。
完整代码实现
def add_strings(num1: str, num2: str) -> str: i, j = len(num1) - 1, len(num2) - 1 carry = 0 result = [] while i >= 0 or j >= 0 or carry > 0: # 取出当前位的数值,超出字符串长度则取0 digit1 = ord(num1[i]) - ord('0') if i >= 0 else 0 digit2 = ord(num2[j]) - ord('0') if j >= 0 else 0 # 计算当前位总和与进位 total = digit1 + digit2 + carry carry = total // 10 current_digit = total % 10 # 将数字转回字符存入结果列表 result.append(chr(current_digit + ord('0'))) # 指针左移 i -= 1 j -= 1 # 反转列表得到正确顺序的结果字符串 return ''.join(reversed(result)) # 测试示例 print(add_strings('11', '5')) # 输出 '16' print(add_strings('11', '6')) # 输出 '17'
代码说明
- 用双指针从两个字符串的末尾开始遍历,确保从最低位开始相加
- 处理长度不一致的情况:当其中一个字符串遍历完,对应位取0
- 进位变量
carry记录当前位相加后需要进位到高位的值 - 结果列表存储的是从低位到高位的字符,最后反转得到正确顺序的字符串
内容的提问来源于stack exchange,提问作者Sai sri nithin
相关产品推荐
相关产品推荐

