python大数据算法python大数_python大数相加

python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下:

思路:

1.将超长数转换成字符串

2.进行长度补零,即让两个要计算的字符串长度一样。

3.将两个字符串,分解成列表,并进行翻转(翻转后,个位在前,目的,从个位往高位计算)

4.创建一个长度与要计算的字符串长度相同的列表,元素填充为0.

5.遍历列表,由于两个列表长度相同,遍历任何一个都可以。

6.由于是10进制,所以两个值累加后与10进行比较,大于等于即有进位。

sum_list = [0]

a = "12345678"

b = "3456785555"

# 长度补零操作。

if len(a) > len(b):

lc = len(a) - len(b)

b = '{}{}'.format(r'0' * lc, b)

elif len(a) < len(b):

lc = len(b) - len(a)

a = '{}{}'.format(r'0' * lc, a)

# 初始化长度与计算长度相同,零填充

sum_list = sum_list * len(a)

# 所以位数,翻转,即从各位向前计算

str1 = list(a[::-1])

str2 = list(b[::-1])

# 位置累加进位。

for i, v in enumerate(str1):

# sum_list[i] 为进位,所以每次加上进位

v_add = int(str2[i]) + int(v) + sum_list[i]

if v_add >= 10:

m, va = divmod(v_add, 10)

sum_list[i] = va

sum_list[i + 1] = m

else:

# 没有进位,无需累加,直接写值

sum_list[i] = v_add

# 计算完成,翻转,转成字符串。

print(''.join('%s'% vi for vi in sum_list[::-1]))

结果:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值