ACM培训第十一讲-大数运算概要.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM培训第十一讲-大数运算概要

ACM程序设计 第十一讲-大数运算 湖南工学院 张新玉 zhangxinyu247@163.com 各类型的范围 int (16位) -32768~32767 (注:现在大多数的编译器的int型是32位的 也就是说跟long型的大小一样) long long或__int64(64位) -9223372036854775808~9223372036854775807 float(32位) 精确到小数点后6~7位 double (64位) 精确到小数点后15~16位 (注:平时做题时 都把浮点型数据定义为double型 避免精度不够出错) 请计算: 1、 2 的 1000次幂 2、 2 的 10000次幂 3、 123456789012345678912345678903453434534534535345434543 乘上 93874293874928734928734028034820938479288374892733453453534 主要内容 数字存储的实现 1 加法运算的实现 2 减法运算的实现 3 乘法运算的实现 4 除法运算的实现 5 幂运算的实现 6 数字存储的实现 大数计算的因数和结果精度一般是少则数十位,多则几万位。在C/C++语言中定义的类型中精度最多只有二十多位。一般我们称这种基本数据类型无法表示的整数为大整数。如何表示和存放大整数呢?基本的思想就是:用数组存放和表示大整数。一个数组元素,存放大整数中的一位。 比如:1664434318 0 1 2 3 4 5 6 7 8 9 1 6 6 4 4 3 4 3 1 8 下标 加法运算的实现 9 9 8 7 6 5 4 3 2 0 1 6 6 4 4 3 4 3 0 0 加数 被加数 + 初始化进位为0,各对应位相加后再加上进位数 1、进位为1 0 2、进位为1 6 3、进位为1 5 4、进位为1 2 由低位向高位相加计算,直至所有运算结束 应注意问题: 判断最后数组的长度. 去掉前导零 大数加法 void Add(char s1[],char s2[])//参数为两个字符串数组 { int num1[M],num2[M]; int i,j; len1 = strlen (s1); len2 = strlen (s2); for (i = len1-1,j = 0; i >= 0; i --)//num1[0]保存的是低位 num1[j++] = s1[i] - '0'; for (i = len2-1,j = 0; i >= 0; i --) num2[j++] = s2[i] - '0'; for (i = 0; i < M; i ++) { num1[i] += num2[i]; if (num1[i] > 9) { num1[i] -= 10; num1[i+1] ++; } } for (i = M-1; (i >= 0)&&(num1[i] == 0); i --) ;//找到第一个不是 0的数的位置 if (i >= 0) //从高位到低位输出每个数 for (; i >= 0; i --) printf ("%d",num1[i]); else printf ("0\n"); } 减法运算的实现 算法也是从低位开始减。先要判断减数和被减数那一个位数长,减数位数长是正常减;被减数位数长,则被减数减减数,最后还要加上负号;两数位数长度相等时,最好比那一个数字大,否则负号处理会很繁琐;处理每一项时要,如果前一位相减有借位,就先减去上一位的借位,无则不减,再去判断是否能够减开被减数,如果减不开,就要借位后再去减,同时置借位为1,否则置借位为0。 减法运算的实现 7 6 8 7 6 5 4 3 2 0 8 9 7 5 4 3 4 3 2 0 减数 被减数 - 初始化借位为0,各对应位相减后再减上借位数 1、借位为1 9 2、借位为1 6 3、借位为0 0 4、借位为0 2 由低位向高位相加计算,直至所有运算结束 处理中注意问题: 1 如果被减数大于减数时,交换两个数再相减,最后加个“-”号即可 2 结果可能会出现前面是一堆0的情况,要处理好,如当减数为112,而被减数为111时,会出现001 乘法运算的实现 首先说一下乘法计算的算法,从低位向高位乘,在竖

文档评论(0)

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

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

1亿VIP精品文档

相关文档