蓝桥杯Python——day3高精度
模拟人在运算时,从小位运算并进位借位
Tips
- 大数要用列表来存,输入时字符串可以用list转换为列表
- 关于进位借位问题,都是向大位进位或者借位,因此将列表reverse
- 对于一些特殊情况,结果得0或者高位为0,则需要在开始或者最后考虑
几道例题
高精度加法
给定两个正整数(不含前导 0),计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35
a = list(input())
b = list(input())
if len(a) < len(b) :
a, b = b, a
a.reverse()
b.reverse()
for i in range(len(b)) :
a[i] = ord(a[i]) + ord(b[i]) -ord('0')
for i in range(len(b), len(a)) :
a[i] = ord(a[i])
for i in range(len(a) - 1) :
if a[i] > ord('9') :
a[i] -= 10
a[i + 1] += 1
if a[len(a) - 1] > ord('9') :
a[len(a) - 1] -= 10
a += [ord('1')]
for i in range(len(a)) :
a[i] = chr(a[i])
a.reverse()
print("".join(a))
其实这题直接用整数列表存更方便
高精度减法
给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤105
输入样例:
32
11
输出样例:
21
a = list(input())
b = list(input())
tmp1 = a[:]
tmp2 = b[:]
a.reverse()
b.reverse()
if len(a) < len(b) or (len(a) == len(b) and tmp1 < tmp2):
a, b = b, a
print("-", end="")
for i in range(len(b)) :
a[i] = ord(a[i]) - ord(b[i]) + ord('0')
for i in range(len(b), len(a)) :
a[i] = ord(a[i])
for i in range(len(a) - 1) :
if a[i] < ord('0') :
a[i] += 10
a[i + 1] -= 1
a[i] = chr(a[i])
a[len(a) - 1] = chr(a[len(a) - 1])
a.reverse()
if "".join(a).lstrip('0') == "" :
print(0)
else :
print("".join(a).lstrip('0'))
这里默认将a列表作为较大的数,这里首先比较了长度,长度相等的话,按字典比较大小
高精度乘法
给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤105
输入样例:
32
11
输出样例:
21
A = list(map(int,list(input())))
B = int(input())
C = []
A.reverse()
if (len(A) == 1 and A[0] == 0) or B == 0:
print(0)
else :
t = 0
for i in range(len(A)) :
t += A[i] * B
C.append(t % 10)
t //= 10
if t != 0 :
C.append(t)
C.reverse()
for i in C :
print(i, end = "")
可以看出非常简洁,因为B数字是个小数,所以可以对A列表的每一位进行运算,通过对每一位的保存来进行运算
特别注意的是,A = list(map(int,list(input())))
用该方法将一串数字字符串,转化为整数列表
总结
和同学聊了才发现emmm,原来Python将数值类型封装的太好了,无论一个数再大也不会发生越界现象,上面的高精度运算都可以直接用a+b,a-b,a*b来完成。哈哈哈,大乌龙,还是对Python的特性不够了解。不过对高精度的练习可以提高对问题的模拟能力,只能这样安慰自己了doge。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!