1、项目报告书项目名称:大整数的加减法负责任务:加法模块姓名:刘满满学号:2008213848完成时间:2010-1-7一、 功能模块定义(1) 功能描述:此模块是实现两个大整数的相加,因为这个整数超出了 long 型,所以选用一个链表把这个大整数存起来,然后再逐个相加。(2) 模块算法描述:Void add(LinkList L1,LinkList L2,LinkList While(i10;a=a-10;把 a 赋给 L3;若 an?m:n;while(inext;q=q-next;i+;Pop(S,c);a=(p-data)+(q-data)+c;if(a=10)a=a-10;Push(S,
2、b);l=(struct LNode *)malloc(sizeof(struct LNode);此行加上接下来的三行都是让l-data=a; 进l-next=r-next;r-next=l;elsePush(S,x);l=(struct LNode *)malloc(sizeof(struct LNode);l-data=a;l-next=r-next;r-next=l;int d;Pop(S,d);if(d=1) 如果栈里面还有,则说明还需要再向前进位l=(struct LNode *)malloc(sizeof(struct LNode);l-data=d;l-next=r-next;r
3、-next=l;四、 所遇问题及解决方法测试数据的时候发现有一种情况没有考虑:即两个数位数相同,并且相加之后还要进位。困为如果要进位,栈里面肯定还有一个 1,所以解决方法就是在模块最后进行一次出栈操作,假如为 1,则把它赋给 L3.五、 体会和总结在这次用链表实现大整数加法的过程中,我学到了很多,对动态链表有了新的认识和了解,以前用的都是线性表,静态的,和数组相似,一直没有尝试过用链表。这次是一个从研究到应用的过程,总体来说,加法运算的编写过程还算是比较顺利的,只是最开始写的时候有一种情况没有考虑,就是:当两个位数相等的数相加并且所得的数位数比两个加数要大一位,这种情况只需要把栈里面的 1 再插到 L3 里面就行了!