大数的阶乘
问题的描述:
对于一个数的阶乘算法应该是有好多中算法,运用递归调用函数、指针等都可以实现,但是对于运算结果的存储是一个问题,对于一个数比较小,我们可以用数组或者字符串来存储该结果,但是如果对于一个大数的运算时,那么则不仅仅是一个数组可以解决的,为了储存的方便,可以运用单链表来解决相应的存储问题。
求解思路:
首先定义一个单链表,用来存储数的结果。在计算的大数的阶乘时运用递归调用的方法来实现,在运算较大的数时,其中间变量也是存在该链表中,即在运算的同时完成存贮的过程,但是在存一个较大数的同时,考虑到位和进位的问题,在链表中定义了相应的函数来实现,即find和search和change函数。
采用的数据结构:
采用的数据结构为单链表。
程序实现说明:
class ChainNode //结点类的定义
class Chain //链表类的定义
bool IsEmpty() const {return first == 0;} //判断是否为空链表
int Length() const; //计算链表的长度
bool Find(int k, int& x); //取出第k个元素
int Search(const int& x) const; //寻找数据为x的元素
Chain& Change(int k, int x); //修改第k个元素的值
Chain& Delete(int k, int& x); //删除第k个元素
Chain& Insert(int k, const int& x); //在第k个元素后插入一个元素x
void Output(); //输出
//改为递归,才能先输出高位后输出低位
void Chain::OutputOne(const ChainNode* current)
//先做乘法
for(j = 0; j < j_end;j++)
{
(j,k);
k = i * k;
(j,k);
}
//然后处理进位
for(j = 0; j < j_end;j++)
{
(j,k);
if(k >= 1000)
{
if (j < j_end -1)
(j+1,l);
else
{
(j+1, 0); //增加高位
l = 0;
}
l += k/1000;
(j+1,l);
k = k % 1000;
(j,k);
程序清单:
// : 定义控制台应用程序的入口点。
//单链表的运用来实现大数的阶乘!!!!
#include ""
#include<iostream>
#include <>
using namespace std;
class ChainNode //结点类的定义
{
friend class Chain;
private:
int data; //数据元素域
ChainNode* link; //链指针域
};
class Chain //链表类的定义
{
public:
大数阶乘实习报告 来自淘豆网m.daumloan.com转载请标明出处.