C++编程《第08课 N进制下的大整数加减法和乘法计算》教学设计.docxVIP

  • 1
  • 0
  • 约3.99千字
  • 约 6页
  • 2026-03-11 发布于广西
  • 举报

C++编程《第08课 N进制下的大整数加减法和乘法计算》教学设计.docx

PAGE

PAGE1

N进制下的大整数加减法和乘法计算

教学目标

1.知识与技能

复习大整数计算的模拟算法

把大整数高精度计算推广到N进制

2.过程与方法:

学习流程:讲授——模仿——练习

通过课堂练习,巩固课堂内容。

教学重点、难点

【重点】

模拟竖式计算大整数乘法和加减法,把十进制计算推广到N进制。

【难点】

模拟竖式计算大整数乘法

课时安排

课时安排:120分钟

四、上课准备

课程相关ppt、白板、白板笔、积分卡

课前检查电脑、投影仪、网络是否有故障,及时修复。

五、教学活动

活动时长

教学活动

注意事项

课前准备

老师准备学生电脑,保证电脑能正常使用;打开投影仪,打开上课课件,以最饱满的热情迎接学生!

提前10分钟准备

开场白

欢迎各位同学回到吉码信息学课堂。

引入

大整数,意思是超过了计算机硬件能够直接处理和计算范围的整数。要处理大整数,就必须特别设计算法。为什么要处理大整数呢?大整数计算这么复杂,而且我们几乎用不到那么大的整数,那为什么要花功夫去计算呢?其实大整数应用很多,比如说密码学,就利用了大整数难以计算的原理,特别是大整数的分解,当数位到达几百位,大整数分解的时间复杂度可以让现代计算机都计算很长时间。此外,科学计算也需要用到大整数。我们现在处理的大整数计算,用的是最朴素的模拟算法,在实际应用中,会采用更加高效的算法。

学习内容(1)

(一)大整数计算概述

利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件的限制,往往达不到实际问题所要求的精度。我们可以利用程序设计的方法去实现这样的高精度计算。

高精度计算中需要处理好以下几个问题:

(1)数据的接收方法和存贮方法

数据的接收和存贮:当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中。另一种方法是直接用循环加数组方法输入数据。

我们一般采用字符串进行输入数字,然后逆序转存到数组中。转存需要把字符转为数字,而且需要逆序存储到数组;为了方便,我们可以将存储数字的数组第0个位置用来存储数字的位数信息,后面从个位开始存储,如果最高位有进位则往数组后方添加数位。最后得到的答案逆序输出即可。

ppt5:大整数的存储。对照示范代码讲解要点。

(2)高精度数位数的确定

位数的确定:接收时往往是用字符串的,所以它的位数就等于字符串的长度。

(3)进位,借位处理

加法进位:c[i]+=a[i]+b[i];

if(c[i]=10){c[i]%=10;++c[i+1];}

或者:c[i]=a[i]+b[i]+x; //第i位相加并加上次的进位

x=c[i]/10; //向高位进位

c[i]%=10;//存储第i位的值

减法借位:if(a[i]b[i]){--a[i+1];a[i]+=10;}

c[i]=a[i]-b[i];

乘法进位:c[i+j-1]=a[i]*b[j]+x+c[i+j-1];

x=c[i+j-1]/10;

c[i+j-1]%=10;

(4)商和余数的求法

商和余数处理:视被除数和除数的位数情况进行处理.

很显然,如果把上面的计算中,关于十进制的部分改为N,就成为N进制的计算式了。这里不再重复强调N进制下的计算方法。大家只要把10换为对应的进制N,即可完成计算。具体原理我们暂时不去关心,证明起来比较耗费篇幅,此处略过。

【提问】关于进位问题,如果按照上面的计算方法,计算第i位的结果能否写成c[i]=a[i]+b[i]然后再处理进位?

【回答】不能。因为这个计算式少加了可能的进位。这个进位的数字依照实际情况而定。

【注意】存储计算结果的数组一定要“干净”。否则,如果数组里存有非零的数字,那么这个数字就会被当做进位累计到结果中。

回顾和复习

(1)高精度加法

输入两个数到两个变量中,然后用赋值语句求它们的和,输出。但是,我们知道,在C++语言中任何数据类型都有一定的表示范围。而当两个被加数很大时,上述算法显然不能求出精确解,因此我们需要寻求另外一种方法。在读小学时,我们做加法都采用竖式方法,如图1。这样,我们方便写出两个整数相加的算法。

高精度加法算法描述:ppt8-11

【提问】单独设立x作为进位有好处吗,直接复用数组存进位会更好吗?

【参考答案】

文档评论(0)

1亿VIP精品文档

相关文档