大数相加、大数相乘

本文探讨了大数相加和相乘的方法。在大数相加时,需要注意字符间的操作和可能的进位。对于大数乘法,有两种策略:一是先相乘再相加,二是利用位数关系进行逐位相加。大数乘法本质上是将一个数的每位与另一个数相乘,然后将所有结果进行加法运算,这里需借助大数加法,并确保使用字符串存储避免溢出。方法二在实现和时间复杂度上更具优势。
摘要由CSDN通过智能技术生成
两个大数相加。
1、是整数;
2、两个数无限大,long都装不下;
3、不能用BigInteger;
4、不能用任何包装类提供的运算方法;
5、两个数都是以字符串的方式提供。

 * 字符串逐位相加,需要进位则进位处理,考虑两个问题:
 * 1、char怎么转换为integer, 减去'0'即可
 * 2、怎么处理对应位相加?反转字符串相加,正确处理进位即可,
 *    这样个位对应个位,十位对应十位,剩余的直接追加

不反转,倒着相加,注意add,最后可能还有add!!!
注意python不能直接字符相减,使用ord()得到ASCII码。

def Big_sum(str1, str2):
    # 还是不考虑负数了~
    if not str1:
        return str2
    if not str2:
        return str1
    n = max(len(str1), len(str2))
    if len(str1) < n:
        str1 = "0"*(n-len(str1)) + str1
    elif len(str2) < n:
        str2 = "0"*(n-len(str2)) + str2
    out = ""
    add = 0
    for i in range(-1, -n-1, -1):
        if ord(str1[i]) - ord("0") + ord(str2[i]) - ord("0") + add > 9:
            out = "%s"%(ord(str1[i]) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值