大数处理.docx
《大数处理.docx》由会员分享,可在线阅读,更多相关《大数处理.docx(11页珍藏版)》请在冰豆网上搜索。
![大数处理.docx](https://file1.bdocx.com/fileroot1/2022-12/30/b005daca-c5f4-4eca-89d7-1205d9f0c222/b005daca-c5f4-4eca-89d7-1205d9f0c2221.gif)
大数处理
沈阳航空工业学院
课程设计
大数处理
班级/学号200604021090
学生姓名刘玮航
指导教师赵晨光
沈阳航空工业学院
课程设计任务书
课程名称软件技术基础课程设计
院(系)电子信息工程学院专业电子工程
班级6402103学号200604021090姓名刘玮航
课程设计题目大数处理
课程设计时间:
2008年7月14日至2008年7月27日
课程设计的内容及要求:
由于计算机所能表示和处理的数的有效数字位数有限,因此在进行大数运算时会产生溢出要求用C语言编写程序实现大整数的四则运算(加、减、乘、除)。
提示:
大数计算的因数和结果精度一般是少则数十位,多则几万位。
在C语言中定义的类型中精度最多只有二十多位,因而我们采取用链表存贮的方式来存放大数。
在计算中会用到从高位开始计算,和从低位开始计算数值的两种情况。
所以我们将链表定义为双向链表,其中为一个单元来存贮数据,一个指针指向前方的数据,另一个指向后的数据。
从而完成大数运算
指导教师2008年7月11日
负责教师年月日
学生签字年月日
一、题目分析
1、在本设计题目中要求是大数的四则运算,但由于计算机所能表示和处理的数的有效数字位数有限,因此在进行大数运算时会产生溢出要求用C语言编写程序实现大整数的四则运算(加、减、乘、除)。
我们知道整型数只能存储16位的数,浮点型也就只能32位的数,对于题目要求的几百位根本不能实现,所以只有用链表或数组两种方法来实现大数的四则运算。
由于链表的方法对我来说实在是比较复杂,所以我选择了用数组的方法来实现设计题目的要求。
只要将从1到9的数均放在一个字符串中,只要减去48即可得到数字结果(依据ASCII的值)。
2、程序主要模块:
(1)大数加法模块;
(2)大数减法模块;(3)大数乘法模块;(4)除法模块。
3、子程序:
(1)读入函数;
(2)比较函数;(3)大数减法子函数(4)大数乘法子函数。
二、设计过程(设计流程图)
1、本设计程序主要是由大数加、减、乘、除运算模块及各个子程序组成,经过对变量及数组的定义,分别调用加法函数add、减法函数sub、乘法函数mul,除法函数divid,进行大数的四则运算。
2、设计流程图
(1)输入函数
输入字符并统计字符串长度,将字符串的每个字符减去48即得到了哈有1—9的数,随后按顺序存放到数组a中,若输入的字符串不是1—9,则输出“输入出错”,程序退出。
图1输入函数的流程图
(2)大数加法运算
加法函数是先比较数组a与数组b的长短,将长的数组字长存放到max_len中。
然后从低位算起,把对应的位相加,之后加上前一位的进位。
判断最后一位是否还要向前进位,经过循环实现加法运算。
图2加法函数流程图
(3)比较函数
判断数组a、b的长度,当a数组长返回1,当b数组长返回0;当数组a、b相等时,利用for循环依次比较存放在数组中的值,则根据不同的情况返回不同的值。
图3比较函数流程图
(4)大数减法子函数
此函数默认数组a>b,过for循环语句,从低位到高位依次相减,并将得到的结果存放到数组c中,同时在相减过程中要充分考虑错位相减操作。
图4大数减法子程序流程图
(5)大数减法
先通过调用大数减法子程序比较两个数组a[MAX]和b[MAX]的长短,记下返回的数值k。
当k等于2时两数组相等,直接输出减法结果0;当k等于1时,调用函数subABigerB(a,b,c),得到加法结果;当k等于0时,数组a小于数组b,调用函数subABigerB(b,a,c),得到减法结果。
图6大数减法流程图
(6)数组乘法子函数
此函数通过for循环语句,依次将m与数组a中的每一位相乘。
如果所得的结果大于10进行进位操作,并把所得的结果存放到数组c中。
图6数组乘法子函数流程图
(7)大数乘法
此函数先调用数组乘法子函数,利用for循环把一个数组的第一位乘以另一个数组中的每一位,把第二位乘得的结果向前移一位,把第三位乘出的结果向前移两位,依次类推。
最后将得到的所有结果通过调用的加法函数累加起来,最终得到运算结果。
图7大数乘法流程图
(8)大数除法
此函数先调用大数减法子函数比较数组a与数组b的大小,并将比较的结果放入k中。
当k等于2时,直接输出商1,余数0;当k等于1时,将被除数减去除数,若余数大于0时一直循环,利用大数加法函数累加循环次数,最后输出数组c,即为商的结果。
当k等于0时,直接输出商0,余数数组a。
图8大数除法函数流程图
(9)主函数
通过定义清零后,分别输入数组a与数组b的值,之后分别进行大数的加、减、乘、除四则运算。
图9数函数流程图
+
三、调试过程及实验结果