实习报告.docx
- 文档编号:11553106
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:57
- 大小:292.84KB
实习报告.docx
《实习报告.docx》由会员分享,可在线阅读,更多相关《实习报告.docx(57页珍藏版)》请在冰豆网上搜索。
实习报告
【实习一】线性表及其应用
n(n>20)的阶乘;
【问题描述】
大数运算——计算n的阶乘(n>=20)。
【基本要求】
(1)数据的表示和存储;
(1.1)累积运算的中间结果和最终的计算结果的数据类型要求是整型——这是问题本身的要求;
(1.2)试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值。
1.【算法设计】
设计思想:
在求大数阶乘的时候重点在于进位的转换,大数之间的乘法,其位数已无法用一个简单的int或者float型来表示,因此我们必须想到是使用什么来存储那么多位,而这之中当前优选的就是数组和链表,而这之中考虑到程序的时间复杂性,因此在数组和链表中我们需要优选时间复杂性低的数据结构来实现算法。
数组的优点在于其访问简便,但是连续申请的内存空间,特别是在要申请到数万个int或float类型的字节,在内存上会出现一些问题,因此我们通常采用链表的方式来实现对大数阶乘后所得的那个结果的存储。
链表可以实现内存的散列分布。
接下来讲一下一些具体的细节。
进位就是实现大数阶乘最重要的一部分,举个例子,在大数阶乘中,实现7!
*8;最后会得到5040*8,因为题目有要求,每个元素或节点只能存3位数据,因此,对于上面的例子,我们必须将5040分成两部分,5040用这两部分乘以8,040*8=320,5*8=40,最后所得结果为40320,因此,以此类推,我们需要对节点的数据域重新划分,在满足数据域,节点域,基础上,再弄个进位域,用这个进位域来表示进位。
具体过程就不再详述,具体见代码。
2.【调试报告】
1.调试过程中,首当其冲的还是进位问题,因为限定了每个节点只能存储3位数,所以在进位的时候我们要进行一些判断语句,多次使用if语句;正是因为进位过程中考虑的比较多,所以在调试过程中,会经常出现一些问题。
2.记得在写这串代码的时候,经常会考虑节点的位置,将首节点尾节点倒数第二的节点分开来讨论,但是到后来发现这样很困难,因为要考虑的类型实在是太多啦,没办法很好地实现,因此我特地在原来的节点中添加了一个新的域,既是【进位域】,进位域的范围可以大于三位数,进位域加上数据域乘以n之后再可以进位,实现起来就相对的简单了。
但是这样做的话,就增加了内存的开销,对程序而言不好,其实可以再对此进行改进,只需要用一个进位变量就可以实现,因为我们每一次只可以对一个节点进行使用。
不过这是在之后才想到的方法,本程序的实现还是采用节点之中的进位域。
3.调试大致就是如此,接下来进入到代码中。
3.【附录】
1.Factor.h
#ifndefFACTOR_H
#defineFACTOR_H
template
structlinknode//引入节点类!
在所有用到类的时候,都是以linknode
{
intdata;
linknode
linknode(linknode
//~linknode(){deletelink;}
intdata1;
};
template
classlist
{
public:
list();//current=newlinknode
current的值为NULL!
~list(){deletefirst;}//deletecurrent;}
boolinsert(linknode
voidstart(inta);//开始执行大数阶乘!
执行m!
voidoutput();//输出大数阶乘。
voidjinwei(linknode
intsum;
private:
linknode
linknode
//总节点的个数!
//linknode
};
//intlist
:
sum=0;//作为初次插入节点的表示
//类的实现
////////////////////////////////////////////////////////////////////////////////////////////
template
list
:
list()
{
first=newlinknode
sum=1;
}
template
boollist
:
insert(linknode
{
linknode
对象无法表示,必须通过指针来访问!
sum++;
if(nextnode==NULL)
{
cerr<<"储存分配错误!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实习 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)