数据结构任意长整数加法.docx
- 文档编号:18451045
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:10
- 大小:134.30KB
数据结构任意长整数加法.docx
《数据结构任意长整数加法.docx》由会员分享,可在线阅读,更多相关《数据结构任意长整数加法.docx(10页珍藏版)》请在冰点文库上搜索。
数据结构任意长整数加法
数据结构-任意长整数加法
《数据结构与算法》
课程设计报告
题目:
任意长整数加法
学期:
2017春
班号:
学号:
代号
姓名:
代号
成绩:
哈尔滨华德学院电子与信息工程学院
年月日
换数据,采用单链表结构方式实现长整数的存储。
3.基于CodeBlocks软件建立工程并用C++语言编译。
4:
测试数据为:
(1)输入:
“0”;“0”应输出:
“0”。
(2)输入:
“234”;“123”应输出:
“357”。
(3)输入:
“345”;“345”应输出:
“690”。
(4)输入:
“19”;“25”应输出:
“44”。
(5)输入:
“123456789”;“123456789”应输出:
“2,4691.3578。
(6)输入:
“7777778888888888”;“999999999999999”
应输出:
“8777,7788,8888,8887”。
(7)输入:
“4545454545454545”;“78787878787878787878”
应输出:
“7879,2424,2424,2424,2423”。
二、实践环境配置
1.硬件配置
处理器:
IntelCorei5CPU@2.10GHz
内存:
8G
SSD:
120G
硬盘:
1T
2.软件配置
Windows10专业版
CodeBlocks16
三、设计正文
1.需求分析
在加法运算中,C++语言所能定义的整形变量是有一定长度限制的。
例如int型变量所能储存值的值域为-32768~32767,最长的整型longint值域为-2147483648~2157483646。
当在需要位数更长的整数加法时计算器设计运用简单的加法运算符难以达到要求,或是在两个较大整数相加的值超过了整型变量所能储存的数值是程序会发生溢出。
需要一种新的加法模式来解决上述问题,来实现任意长的整数进行加法,得到想要的结果。
本程序目的就是完成对任意长的整数进行加法运算:
1.系统分析
本程序实现计算任意长的整数的加法运算。
以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。
功能框图如下3-1所示
图3-2功能框图
2.系统设计
本程序中,集合的元素限定为数字字符[‘0’~’9’]和字符‘,’与‘:
’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。
利用单链表现实长整数的存储,每个结点含一个整形变量。
输入的形式以回车结束,可以直接输入正数或负数。
按中国对于长整数的表示习惯,显示数以每四位一组,字符‘,’为分隔符。
算法流程如下图3-1所示:
图3-2算法流程图
3.程序系统实现
本程序包含三个模块:
1)
主程序模块:
void main(){
初始化;
while
(1){
链表创建;
用户输入数字;
数据存储;
数据处理;
输出结果;
}
}
2)集合单元模块——实现集合的抽象数据类型。
3)结点结构单元模块——定义集合的结点结构。
函数主要功能的代码如下:
函数:
Node*creat(Node*head)
功能:
创建单链表。
函数:
Node*insert(Node*head)
功能:
试读取数据,采用头插法和ASCII码技术。
将字符转换为与字符相同的数字。
函数:
voidAdd(Node*headone,Node*headtwo,Node*headthree)
功能:
释放内存空间。
函数:
voiddestroy(Node*head)
功能:
求出两个无限长整数的求和。
主函数深度解析:
/*主函数*/
voidmain()
{
Node*creat(Node*head);/*声明创建单链表的函数*/
Node*insert(Node*head);/*声明读取数据函数*/
voidAdd(Node*headone,Node*headtwo,Node*headthree);/*声明相加函数*/
voidprint(Node*head);/*声明输出函数*/
voiddestroy(Node*head);/*声明释放内存空间函数*/
Node*headone;/*被加数的头结点*/
Node*headtwo;/*加数的头结点*/
Node*headthree;/*和的头结点*/
while
(1)
{
headone=creat(headone);/*创建单链表,用于储存被加数*/
headtwo=creat(headtwo);/*创建单链表,用于储存加数*/
headthree=creat(headthree);/*创建单链表,用于储存和*/
printf("输入被加数A:
");
headone=insert(headone);/*读被加数*/
if(headone!
=NULL)
{
printf("输入被数B:
");
headtwo=insert(headtwo);/*读取加数*/
}
if(headone!
=NULL&&headtwo!
=NULL)
{
Add(headone,headtwo,headthree);/*求和*/
print(headthree);/*输出和*/
destroy(headthree);/*释放内存空间*/
}
printf("\n\n\n");
}
}
4.系统测试
由CodeBlock编写datalist.cpp文件,用编译器编译出datalist.o文件,最后连接成可执行文件datalist.exe,如图4-1所示。
运行可执行文件datalist.exe出现DOS界面,根据上文预定测试数据进行测试,查看结果的正确性,效果如图4-2所示。
图4-1编译文件
图4-2测试程序
四、小组成员分工说明
独立完成。
五、总结
1.算法改进设想:
(1)在算法效率上,将单链表该为双向循环列表,
(2)在功能设置上,编写出简易GUI,在界面中设置相关操作选项。
2.课程设计期间的主要收获:
理论转化到实际应用,看似简单,实际操作却有各种难点。
唯独静下心来,查找相关资料文献,代码一个一个敲进去,运行测试看结果,再修改,再测试,已经不知道重复多少次才有了现在的满意结果,深知其中还有很多处有待改善之处。
希望以后能熟练掌握大学里的每个知识和技能,灵活运用于实际生活中。
在此感谢老师的悉心指导和同学的帮助,才有现在完善的结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 任意 整数 加法