- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计报告课程名称:计算机高级语言课程设计(C)学生姓名:学号:班号:2015年春季学期大数相乘问题题目描述两个大数相乘问题【要求】本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。【提示】两个相对较大的数肯定是不能够用LONG INT类型存储的,因为LONG型数据的数据范围也并不是很大,于是就需要采用其他的存储结构。这里推荐用数组存储一个大数,数组的初始空间可以定义到如200或300个单元,每个单元存储一位数据,形如下图:255 96207.。。。。这样理论上,比如数组定义为200,就可以存储200个数字的整数,应该是满足足够大的条件了。而结果的存储也需要考虑空间的问题,所以需要一个更大的数组。在解决了存储问题后,我们需要来实现乘法运送的过程,也就是说你必须要把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过程。算法描述1.简介本程序用到多个int型变量与字符型数组a[]、b[]以及整形数组num1[]、num2[]、e[],结合for循环与do—while、while循环,使用if语句判断各个环节的运行结果,最终达到目的,做到了计算出两个大数相乘的结果并将其输出。未用到子函数,靠主函数与复杂的算法完成计算。2.算法分析1)、两个大数的输入:(自己设计完成)考虑到两个大数长度非常长,采用单个变量显然会使程序臃肿混乱,故采用数组来储存这两个大数;又考虑到人们在键盘上的输入一串数字时是希望一次将其输完,因此在输入这两个数字时要避免其他繁杂的操作。字符型数组可一次性存入一个字符串,但字符无法进行数学运算;整型数组可以进行运算,但一次只能存入一个数字。所以本程序使用字符型数组读入两个大数,再将其转为整型数组进行相乘、相加运算。2)、读取两个字符数组存入字符的长度:(自己设计完成)两字符数组初始长度都比较大,本程序将它们长度均定义为200,(还可以更大);但人们在键盘输入的数字是随机的,因此每次执行两大数的长度都不会是一个定值,且一般会小于200。这就需要有一个算法来读取两字符串的长度。字符串的末尾会有结束符’\0’跟随,可使用循环语句与计数器m、n,在计数的同时判断是否读到结束符位置,若检测到’\0’,说明用户输入的字符串已经结束,这时跳出循环,并取计数器最终值,即为大数长度。为达到修改程序时及时纠错目的,可将这两个字符长度用printf语句输出。这段算法采用do-while循环。这里也可以运用函数库中更为简便的strlen函数。3)、字符串转化为数字:(自己设计完成)字符串与数字的转化可以应用常用字符与ASCII码之间的关系来完成。数组a、b接收到的是0-9之间的字符,虽然其显示的是数字,但与数字有别。ASCII值048-057段代表了1-9这些字符,’0’与048相对应,因此,用a中存放的字符减去’0’即可得到各字符所代表的数字。由于这些字符无法一次性转为数字,故会用到for循环结构。并在循环的同时将读取的数字存入数组num1、num2中。4)、两大数相乘算法:(参考其他程序)首先根据两数相乘的运算规则定义会用到的各个变量,他们有:计数器i、k、j、p;临时变量tmp;进位变量up;存放最终结果的数组e。计算的过程用实例来说明,随机选择两个较大数字,如:65936×36794,可先将其笔算过程写出: 6 5 9 3 6 ×3 6 7 9 40 0 2 6 3 7 4 40 5 9 3 4 2 44 7 1 5 5 2…………….本算法就是按照笔算的思想来进行的。num2中的数字由末位到第一位依次与num1中的最后一位数字相乘,并将结果正序存在数组e中。然后num2中所有数字再与nu1中倒数第二位相乘,同时用相乘的结果与前一次计算的结果错位做加法运算,并以此类推。详细过程:如65936先与4做乘法运算,tmp=6*4=24,进2余4,用取余符%得到余数4并存在e[1]中,用int型变量的除法运算特点得到进位量2存放在up中;至此最内层循环进行一次,数组num2中的因数前移一位变为3,tmp=3*4=12按乘法计算法则知,12取余应与上次运算的进位量2相加,而这一次的进位量1应继续存放在up中等待与下一次的余数相加,以后继续进行循环,直到num2中的第一位与4做完乘法。但当进行完这些工作后,程序并不会马上回到外层循环,而是先判断此时up是否大于0,若是,e中存入的数字前面会再存入一个数据即为up的当前值。当num2所有数与4相乘后程序跳出内层循环,num1前移一位,然后继续执行循环。可注意到程序中的tmp变量并不仅是是num1与n
您可能关注的文档
最近下载
- 2023-2024学年辽宁省大连市沙河口区八年级(上)期末数学试卷+答案解析.pdf VIP
- 统编版(2024)七年级下册道德与法治11.1《法不可违》教案 .pdf VIP
- 小学生古诗词大赛试题(附答案).docx VIP
- GPIR复合外模板现浇混凝土保温系统建筑构造.pdf VIP
- 中小学校长选拔笔试试题及参考答案.docx VIP
- 全国计算机等级考试教程二级WPS Office高级应用与设计:电子表格的创建与编辑PPT教学课件.pptx VIP
- 黔西南州企业融资难融资贵主要情况反馈.doc VIP
- 垂径定理练习.3 垂径定理练习.doc VIP
- (已压缩)关于建筑设计防火的原则规定(1960)(OCR).pdf VIP
- 工业与民用建筑抗震设计规范TJ11-78.pdf VIP
文档评论(0)