超长整数运算实验报告.docx课程设计报告
课程名称: 数据结构
设计题目: 超长整数运算程序
院(系): 数计学院
专 业:数学与应用数学
组 别: 组长黄彬 队员丁书山
学生姓名:黄彬丁书山
起止日期:_
指导教师:
一、 系统功能分析每个模块具体的功能,包括每个模块的参数和得出的结果
函数名
Status conversion(char str[],NodeList &oprh)
入口参数
char str[] NodeList &oprh
返回值
OK
模块功能
将输入的字符转化为所需处理的类型
函数名
Status input(NodeList &oprl,NodeList &opr2,char str[])
入口参数
NodeList &oprl
NodeList &opr2
char str[]
返回值
OK
模块功能
主输入函数
函数名
Status initbuf(char str[])
入口参数
char str[]
返回值
OK
模块功能
初始化字符串
模块3, 4
函数名
int cmplinklen(NodeList oprl,NodeList opr2)
入口参数
NodeList oprl NodeList opr2
返回值
0
模块功能
对无符号的链表比较长度
模块5
函数名
int length(NodeList oprr)
入口参数
NodeList oprr
返回值
count
模块功能
求链表长度
模块6
函数名
Status Creat(NodeList &oprr,int len)
入口参数
NodeList &oprr int len
返回值
OK
模块功能
生成指定长度的链表
模块7
函数名
int compare(NodeList oprl,NodeList opr2)
入口参数
NodeList oprl NodeList opr2
返回值
0
模块功能
比较有符号的链表长
模块8
函数名
Status init(NodeList &oppr)
入口参数
NodeList &oppr
返回值
OK
模块功能
初始化链表
模块9
函数名
Status distroy(NodeList &oprr)
入口参数
NodeList &oprr
返回值
OK
模块功能
销毁链表
模块10
函数名
Status add_bas(NodeList opr 1,NodeList opr2,NodeList &oprr)
Status add(NodeList opr 1,NodeList opr2,NodeList &oprr)
入口参数
NodeList oprl NodeList opr2 NodeList &oprr
返回值
OK
模块功能
无符号和有符号加法的算法
模块11
函数名
Status sub_bas(NodeList oprl,NodeList opr2,NodeList &oprr)
Status sub(NodeList oprl,NodeList opr2,NodeList &oprr)
入口参数
NodeList oprl NodeList opr2 NodeList &oprr
返回值
OK
模块功能
无符号和有符号减法的算法
模块12
核心为乘法算法
□ □ □
X □口口
□ 口口 口
□ □g □
口 口口口
乘法的解析如图所示□口口 口口口 口
首先生成一个相当于链表长度之和的链表,每一格代表一个结点,然后分别计算每个结点内 的乘法。
三、调试与操作说明
3. 1问题分析及解决
超长整数的加法和减法比较简单,但是乘法难度就很大,由于我的c语言基础不是很好, 在班上同学的帮助下乘法的大致算法如图所示,首先生成一个相当于两链表长度之和的链 表,每个格子代表一个结点,然后分别计算每个结点内的乘法。其中存在问题的是这段代码 p3=oprr~>next;
if (p3-〉data=O && p3-〉next!二oprr)
{
qq二p3;
p3二p3-〉next;
oprr~>next=p3;
p3->prior=oprr;
free (qq);
)
为释放链表开头结点为0的无意义的数字。但是存在1000000x0这样一种情况时所有0 会被全部释放掉。
程序测试运行截图
1)两个数等长,不等
超长整数运算实验报告 来自淘豆网m.daumloan.com转载请标明出处.