笔记

今天室友面试了,居然挂到了ByteDance的二面,其中考了一个大整数相乘,那么我就尝试借助Python再来写一遍吧!实现思路很简单,平时我们咋计算乘法的,就按照公式计算就好了,程序中就是要考虑好边界条件与此同时,结合一下编程语言的特性,也会使得代码更加精简。#-*-coding:utf-8-*-#author:DYBOY#time:2019-9-2121:53:03#desc:大数相乘#字符串分割为listdefstr_split(strs):str_arr=[]forcharinstrs:str_arr.append(char)returnstr_arr#大数相加defbig_add(a_str,b_str):aa=str_split(a_str)bb=str_split(b_str)sum_str=''c=0whilelen(aa)orlen(bb)orc:try:a=int(aa.pop())except:a=0try:b=int(bb.pop())except:b=0c+=a+bsum_str=str(c%10)+sum_strc=c>9returnsum_str#大数相乘之大数*个位数defsingle_mutipule(a_str,b_char):aa=str_split(a_str)b=int(b_char)sum_str=''c=0whilelen(aa)orc:try:a=int(aa.pop())except:a=0mu=a*b+csum_str=str(mu%10)+sum_strifmu>9:c=int((str(mu))[:-1])else:c=0returnsum_str#大数相乘defmutipule(a_str,b_str):aa=str_split(a_str)bb=str_split(b_str)sums_arr=[]sum_str=''foridx,binenumerate(bb):a_b1=single_mutipule(aa,b)+idx*'0'sums_arr.append(a_b1)forsinsums_arr:sum_str=big_add(sum_str,s)returnsum_strif__name__=='__main__':s1='4174468421068499's2='99861646849'print(mutipule(s1,s2))虽然网上很多大神写了一些特别漂亮的代码,但是一串儿的循环嵌套,数组取值,脑内循环,太猛了此方法将部分计算过程拆分为函数,相信对于大家的理解更有帮助另外补充一句,python的int类型是无限精度的,所以python不需要实现大整数相乘…

2024-7-10 910 0