高精度和递归.pptx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高精度和递归 主讲人:唐灿本次讲课重点:1.高精度加法2.高精度减法3.高精度乘法(高精度除法暂时不讲)4.递归引入int范围:-2147483648(-2^31 ) ~2147483647(2^31 – 1 ) 最多不过10位数long long范围:-9,223,372,036,854,775,808(-2^63)~ 9,223,372,036,854,775,807 (2^63-1 )最多不过19位数那么,几百上千位数的加减乘怎么办??这里我们要用到传说中的高精度算法:原理:根据小学生加减乘法的运算过程,用数组进行模拟,来解决大数加减乘的操作。效率?时间复杂度:高精度加法和减法的时间复杂度都是O(n)高精度乘法的时间复杂度是O(n^2) 一、高精度加法:我们用小数来举一个A+B的栗子: 3 6 4 9 3 0 2 -A + 8 6 4 9 -B要计算上面两个数的和,我们可以这样做:1.开一个数组a[]={2,0,3,9,4,6,3},我们从个位开始往高位依次存入数组。2.另开一个数组b[]={9,4,6,8,0,0,0},也是从个位开始往高位依次存入数组,如果位数不够先补零3.再开一个数组sum[]存的是A+B的和的每一位数字那么就变成这样: 0 1 2 3 4 5 6 i 2 0 3 9 4 6 3 a[i] + 9 4 6 8 0 0 0 b[i]怎样来求sum[i]呢?由于i==0时表示为这个数的个位数,i==1表示十位数...那么我们就可以用小学生加法从个位开始算,即从i==0开始往后算。首先将sum[]数组每一位初始化为0sum[0]=2+9=11,由于11大于了9,所以我们要向高位进位(即往后进位),那么sum[0]=11-10=1,向高位进位,则sum[1]+=1,此时sum[0]=1,sum[1]暂时为1。 0 1 2 3 4 5 6 i 2 0 3 9 4 6 3 a[i] + 9 4 6 8 0 0 0 b[i]i==0 sum[0]=1,sum[1]++; 个位数算出来为1i==1 sum[1]=0+4+sum[1]=5;不需进位,sum[2]仍为0, 算出十位为5i==2 sum[2]=3+6+sum[2]=9;不需进位,sum[3]仍为0, 算出百位为9i==3 sum[3]=9+8+sum[3]=17,需要进位,那么千位应该为17-10=7,向高位进位,sum[4]++i==4 sum[4]=4+0+sum[4]=5,不需进位sum[5]=6,sum[6]=3 0 1 2 3 4 5 6 i 2 0 3 9 4 6 3 a[i] + 9 4 6 8 0 0 0 b[i]那么,这样算完结束后sum[]={1,5,9,7,5,6,3};是不是这两个数的和为1597563呢???当然不是,因为我们第一位数表示的是个位,所以我们是倒着存的,所以结果因为倒着输出,因此我们计算出了A+B=3657951高精度加法代码实现(未处理前导零):二、高精度减法:由于高精度减法和高精度加法区别不大,而且一般我们都是算大—小,那么小—大的怎么办??我们还是来看这么一个栗子: 3 6 4 9 3 0 2 -A - 3 5 2 8 6 4 9 -B要计算上面两个数的和,我们可以这样做:1.开一个数组a[]={2,0,3,9,4,6,3},我们从个位开始往高位依次存入数组。2.另开一个数组b[]={9,4,6,8,2,5,3},也是从个位开始往高位依次存入数组,如果位数不够先补零3.再开一个数组sub[]存的是A+B的差的每一位数字那么就变成这样: 0 1 2 3 4 5 6i 2 0 3 9 4 6 3 a[i] - 9 4 6 8 2 5 3 b[i]首先将sub[]数组每一位初始化为0sub[0]=2-9=-7,由于-7小于0,所以我们要向高位借位(即往后借位),那么sub[0]=-7+10=3,向高位借位,则sub[1]-=1,此时sub[0]=3,sub[1]暂时为-1。 0 1 2 3 4 5 6 i 2 0 3 9 4 6 3 a[i] - 9 4 6 8 2 5 3 b[i]i==0 sub[0]=3,sub[1]=-1;

文档评论(0)

119220 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档