- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实习的题目
n(n20)的阶乘
【问题描述】
大数运算——计算n的阶乘(n=20)。
【基本要求】
(1)数据的表示和存储;
(1.1——这是问题本身的要求;
(1.23位数值。
(2)数据的操作及其实现:
基于设计的存储结构实现乘法操作,要求从键盘上输入n
【测试数据】
(1)n=20,n!=2432902008176640000
(2)n=30,n!=265252859812191058636308480000000
#include stdafx.h
#include iostream
#includeiomanip
using namespace std;
template class T
class Chain;
template class T
class ChainNode
{
friend ChainT;
private:
T data;
ChainNodeT *link;
};
templateclass T
class Chain
{
public:
Chain() {first = 0;} //构造函数
~Chain(); //析构函数
bool IsEmpty() const {return first == 0;} //判断链表是否为空
int Length() const; //求链表的长度
bool Find(int k, T x) const; //查找第k个元素
int Search(const T x) const; //查找元素x
ChainT Delete(int k, T x); //删除第k个元素
ChainT Insert(int k, const T x); //在第k个元素之后插入x
void Output(ostream out) const; //单链表的输出
ChainT Fac(long n);
//求大数阶乘
private:
ChainNodeT *first; // 指向第一个节点
};
templateclass T
ChainT::~Chain()
{//删除所有的节点
ChainNodeT *next;
while (first)
{
next = first-link;
delete first;
first = next;
}
}
templateclass T
bool ChainT::Find(int k, T x) const
{// 查找第k个元素,并赋值给x
if (k 1) return false;
ChainNodeT *current = first;
int index = 1;
while (index k current)
{
current = current-link;
index++;
}
if (current)
{
x = current-data;
return true;
}
return false;
}
templateclass T
int ChainT::Search(const T x) const
{//查找元素x,返回该元素的下标
ChainNodeT *current = first;
int index = 1;
while (current current-data != x)
{
current = current-link;
index++;
}
if (current) return index;
return 0;
}
templateclass T
ChainT ChainT::Delete(int k, T x)
{// 删除第k个元素,并赋值给x,返回改变后的链表
ChainNodeT *p = first;
if (k == 1)
first = first-link;
else
{
ChainNodeT *q = first;
for (int index = 1; index k - 1 q;index++
文档评论(0)