在努力的路上很累,但有时候停一下,回过头一看,才发现自己已经走了好远
——某没到二十岁但幻想自己是个作家的青年
我依稀记得,在大一的时候,我的C语言老师讲课设时举的例子就是大数运算
当时我是真觉得写一个这样的课设好难,现在回过头看看,好像也不过如此
def solve(self, s: str, t: str) -> str:
def solve(self , s: str, t: str) -> str:
m = len(s) - 1 # 首先获取s和t的长度,后面遍历s和t的时候使用
n = len(t) - 1 # 此处减1为的是直接获取数组最后一位下标
if m < 0: # 如果s或t为空,则返回不为空的那个字符串
return t # 其实可以不写,但感觉写上会快点?
if n < 0:
return s
tmp = 0 # tmp为进位,res负责保存新数组
res = '' # 在原数组上修改也行,但是我懒
while m >= 0 or n >= 0 or tmp > 0: # 只在s和t均遍历完且进位不为1的情况下跳出循环
if m >= 0:
tmp += int(s[m]) # 在计算s的某一位和t的后一位时自动把进位加上了
if n >= 0:
tmp += int(t[n])
res = str(tmp % 10) + res # 然后求余,进新字符串
tmp //= 10 # 求进位,这里是整除
n -= 1 # 修改下标位置
m -= 1
return res
虽然它肯定不是最简洁的,但我懒得改了
有时我真想吐槽自己,把Python用得跟C一样(也许C能调函数呢?还是我菜了)
那这个时候可能有同学就要问了:“既然你都用了Python那有没有更简单的方法啊?”
诶,那还真有
def solve(self , s: str, t: str) -> str:
return str(int(s) + int(t))
简洁明了,一目了然
那为什么不这样写呢?
那当然是因为 调函数没意思 要搞明白大数加法到底是怎么实现的辣