双向链表c语言5万的阶乘,双链表的方法实现大数的阶乘.doc

双链表的方法实现大数的阶乘

双链表实现大数的阶乘//采用双向链表的做法#includeusing namespace std;class LinkNode//链表节点的函数{public:LinkNode(int value)//构造函数{ data=value; rlink=NULL; llink=NULL;}LinkNode()//构造函数{ data=0; llink=rlink=NULL;}public:int data;//节点中由于存储数据LinkNode *rlink;//指向右边节点的指针LinkNode *llink;//指向左边节点的指针};class List{public:List()//链表的构造函数{ first=last=new LinkNode(1);//调用节点的构造函数} void Control(int n);//进行大数阶乘的函数以及链表存储该数据的申明 void Output(LinkNode *p);//输出该数据采用链表的方法的声明protected:LinkNode *first;//链表的头结点LinkNode *last;//链表的尾节点};void List::Control(int n)//函数的定义{ for(int i=1;i<=n;i++) {LinkNode *p=this->first;//声明一个指向头结点的指针LinkNode *current;for(;p;p=p->rlink)//对每一个节点中的数据乘以ip->data=p->data*i;for(LinkNode *p1=this->first;p1;p1=p1->rlink){ while(p1->data>=1000)//判断如果任何一个节点中的数据是否大于 { //如果大于则进位,并且保证所有节点数据皆小于 if(p1->rlink==NULL)//如果节点数据大于且下一个节点为空则构造一个空节点添加在其后 {LinkNode *newnode=new LinkNode(); newnode->rlink=p1->rlink;p1->rlink=newnode;last=newnode;newnode->llink=p1; } else ;//如果数据大于并且下一个节点可以储存数据 current=p1;p1=p1->rlink;p1->data=p1->data+current->data/1000;//进位后的下一个节点的数据current->data=current->data%1000;//进位后该节点的数据 }} } Output(last);//输出该大数的阶乘}void List::Output(LinkNode *p)//输出函数的定义{cout<data;//输出第一个节点的数据p=p->llink;//使指针指向下一个节点 while(p!=first->llink) { if(p->data>99&&p->data<1000)//当节点的数据是三位数时直接输出cout<data; else if(p->data>9&&p->data<100)//当节点的数据是两位数时在前面加一个输出 cout<data; else if(p->data>=0&&p->data<10)//当节点的数据是一位数时在前面加两个输出 cout<data;p=p->llink; }}int main(){cout<>n) { List list; cout<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值