You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中利用ASCII码实现字符串数字相加并返回字符串

用ASCII码实现字符串数字相加的Python方案

需求很明确:接收两个字符串格式的数字(支持多位数),通过ASCII码转换完成加法运算,最终返回字符串结果。

先纠正一个常见错误

你提供的示例里直接对多位数字符串调用ord()是行不通的——ord()只能处理单个字符,对'11'这类字符串调用会报错。正确的做法是逐位处理字符串中的每个数字字符,利用ASCII码的特性完成数值转换。

实现思路

  1. 数字字符的ASCII码是连续的:'0'对应48,'1'对应49,以此类推。所以单个数字字符转整数可以用 ord(char) - ord('0')。
  2. 模拟手工加法的逻辑:从两个字符串的末尾(最低位)开始逐位相加,处理进位。
  3. 将计算得到的每一位整数再转回字符(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:23:11