大数加法

  题目: a = '543425435465473423038950284590702985902890670982032850808403649038502802859285249045'

              b = '890795609630592689208605865987690876939065989028928905820685208609820695'

              给定上述两个数,编程实现两个数的求和。  虽然,有的人会说,python的int型包含c++中的long int  根本不需要这样的方法,但是,给出的数超过long int 时,就必须这样求解了。

 分析:

        想像我们求加法的过程。。首先从低位算起,两数如果相加小于10,则直接将相加的结果放下输出结果的对应位置上,如果两个数结果大于10,这时,必须考虑进位,即:将加的结果对10整除(舍弃余数即:// ),放在(输出结果)前一位,将加的结果对10取余数放在输出结果的对应位置。

      这里我们还需将位数短的那个填充零,让其位数相等,以免运算时越界。。如果还不是很清楚,看看下面的代码。 代码中有详细的注释

代码实现:

def big_data_add(a, b):
    # 1.先获取两个中最大的长度,然后将短进行补充,使长度一致
    max_len = len(a) if len(a) > len(b) else len(b)

    a = a.zfill(max_len)
    b = b.zfill(max_len)
    # 输出看看  我们发现长度一致
    # print(a)
    # print(b)
    a = list(a)
    b = list(b)
    result = [0 for i in range(max_len+1)]   # 这里加1主要是考虑到两数加起来可能比之前的数还多一位

    for i in range(max_len-1, -1, -1):
        temp = int(a[i]) + int(b[i])
        if temp >= 10:
            # 这里result是i+1  是因为result的长度比max_len长度长
            result[i+1] += temp % 10
            result[i] += temp // 10
        else:
            result[i+1] += temp

    return result

if __name__ == '__main__':
    # 首先定义了两个数  用字符串给出
    a = '543425435465473423038950284590702985902890670982032850808403649038502802859285249045'
    b = '890795609630592689208605865987690876939065989028928905820685208609820695'
    c = ''
    result = big_data_add(a, b)
    for i in range(0, len(result)):
        c += str(result[i])
    print('{}\n + {} \n = {}'.format(a, b, c))

输出结果: