大数加法
题目: 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))