Python写算法实现大数相加

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

1任务

两个任意长度的大整数相加。

2任务实现

用字符串存储数据,Python原生支持大整数相加,不需要额外写代码处理。

在 Python 中,整数(int 类型)的位数没有固定上限,它的大小仅受限于你的计算机的可用内存。这一点和很多其他编程语言(如 C/C++、Java)有本质区别 —— 这些语言的整数类型(如 intlong)有固定的位数限制(比如 32 位、64 位),超出范围就会溢出。

Python 会动态地为大整数分配内存,只要你的内存足够,就能存储任意位数的整数。

Python的整数类型本身就是“大整数”,可以直接进行运算:

手动用算法实现,可以用模拟竖式加法的思路来写代码;

两个大数(字符串)右对齐,左侧用若干零补全。

代码如下:

def bigintAdd(num1: str, num2: str) -> str:
    """
    实现大数相加,支持任意长度的数字字符串相加
    
    Args:
        num1: 第一个大数(字符串形式,仅包含数字)
        num2: 第二个大数(字符串形式,仅包含数字)
    """

    # 输入校验:确保输入都是纯数字字符串
    if not (num1.isdigit() and num2.isdigit()):
        raise ValueError("输入必须是纯数字字符串")
    
    # 初始化指针(指向两个数字的末尾)、进位、结果列表
    i,j = len(num1) - 1,len(num2)-1
    carry = 0    
    result = []
    
    # 循环条件:只要还有未处理的位,或还有进位
    while i >= 0 or j >= 0 or carry > 0:
        # 取出当前位的数字(指针越界则取0)
        digit1 = int(num1[i]) if i >= 0 else 0
        digit2 = int(num2[j]) if j >= 0 else 0
        
        # 计算当前位的和(包含进位)
        total = digit1 + digit2 + carry
        
        # 当前位的结果:取和的个位
        current_digit = total % 10
        # 更新进位:取和的十位(整除10)
        carry = total // 10
        
        # 将当前位结果加入列表(后续需要反转)
        result.append(str(current_digit))
        
        # 指针左移,处理下一位
        i -= 1
        j -= 1
    
    # 反转结果列表并拼接成字符串(因为是从个位开始存的)
    return ''.join(reversed(result))


# 测试用例

if __name__ == "__main__":
    # 测试用例1:普通数字相加
    num1 = "12345678901234567890"
    num2 = "98765432109876543210"
    print(f"{num1} + {num2} = {bigintAdd(num1, num2)}")  
# 输出:111111111011111111100


 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

writec0de

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值