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

思路:

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

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

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

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

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

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

# 存储每次的计算结果
sum_list = [0] a = "" b = "" # 长度补零操作。
if len(a) > len(b):
lc = len(a) - len(b)
b = '{}{}'.format(r'' * lc, b)
elif len(a) < len(b):
lc = len(b) - len(a)
a = '{}{}'.format(r'' * 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]))

结果:

python进行两个大数相加的更多相关文章

  1. 用字符串模拟两个大数相加——java实现

    问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...

  2. [ACM] ZOJ Martian Addition (20进制的两个大数相加)

    Martian Addition Time Limit: 2 Seconds      Memory Limit: 65536 KB   In the 22nd Century, scientists ...

  3. java-两个大数相加

    题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a=&qu ...

  4. 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过

    杭电ACM(1002)大数相加 A + B Problem II Problem DescriptionI have a very simple problem for you. Given two ...

  5. python基础练习题(题目 计算两个矩阵相加)

    day30 --------------------------------------------------------------- 实例044:矩阵相加 题目 计算两个矩阵相加. 分析:矩阵可 ...

  6. 随机数组&大数相加

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中 一,      设计思路: 先生成随机数数组,再将数组保存在一个字符串中,然后将数组各数字加和, ...

  7. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  8. 基于visual Studio2013解决C语言竞赛题之1077大数相加

        题目 解决代码及点评 /************************************************************************/ /* ...

  9. 大数相加(类似杭电acm1002)

    /*输入两个非常大的整数(完全超出了int.long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果.*/ //自己用题目所给的案例测试,输出是正确的,也能输出正确的结果,不 ...

随机推荐

  1. 【leetcode】403. Frog Jump

    题目如下: 解题思路:我的做法是建立一个字典dic,key为stone,value是一个set,里面存的是从前面的所有stone跳跃到当前stone的unit集合.例如stones=[0,1,2,3] ...

  2. Linux启动redis提示 /var/run/redis_6379.pid exists, process is already running or crashed

    执行启动命令:service redisd start 提示信息:/var/run/redis_6379.pid exists, process is already running or crash ...

  3. mysql版本

    $ mysql Welcome to the MariaDB monitor.  Commands end with ; or \g. Your MySQL connection id is 4791 ...

  4. python之路----操作系统的发展史

    阅读目录 手工操作 —— 穿孔卡片 批处理 —— 磁带存储和批处理系统 多道程序系统 分时系统 实时系统 通用操作系统 操作系统的进一步发展 操作系统的作用 手工操作 —— 穿孔卡片 1946年第一台 ...

  5. Mac终端的Cocoapods创建自己的私有库和公有库

    一,前言 为什么要用Cocopods 通常在开发的过程中,大多时候,我们会处理一类相同的操作,比如对于字符串String的邮箱验证,是否为空,手机号验证,或者一些UIView的动画操作,我们为了避免写 ...

  6. linux-批量修改目录下后缀shell

    #!/bin/bashcd /optrename .sh .shell *.shecho "后缀修改成功"

  7. WPF属性之理解附加属性

    附加属性,顾名思义,和被附加的控件没有依赖关系,只是强行给目标控件挂上一个“属性值”,以便于操作之.就好比,你在学校是学生,那么就要听老师的管教,在公司是下属,就要服从老板的命令一样. 我们常见的附加 ...

  8. servlet--三大域

    requset  \ session   servletContext  application

  9. mysql 数据库表结构对比语句

    判断两个数据库互相不存在的表 select a.TABLE_SCHEMA,a.TABLE_NAME from information_schema.TABLES a where a.TABLE_SCH ...

  10. git报错-Initial commit Untracked files nothing added to commit but untracked ……

    文章转自 https://www.jianshu.com/p/61c3db30d488 在目标执行命令 git stratus 报错 根据上面的文章,可以解决问题.不行的话,请留言. 感谢你的阅读