大数阶乘结果中零的个数,使用链表进行实现。
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
class Node{
public:
int value;
Node *next;
};
void calValue(int Num,Node **Head){//使用链表计算大数的阶乘
int flag=1;
while(flag<=Num){
if(!(*Head)){
*Head=new Node();
(*Head)->value=1;
flag++;
continue;
}
Node *tmp=*Head;
int last=0;//记录余数
while (tmp)
{
int sum=(tmp->value)*flag+last;
tmp->value=sum%10;
last=sum/10;
if(last>0&&!tmp->next){
tmp->next=new Node();
//tmp->next->value=1;
}
tmp=tmp->next;
}
flag++;
}
}
int outNode(Node **Head){
Node *next=*Head;
int num=0;
while(next){
if(next->value==0){
++num;
}
else
{
break;
}
next=next->next;
}
return num;
}
void deleteAllNode(Node **Head){//最后释放各个节点
Node *tmp=*Head;
while(tmp){
Node *tmpNext=tmp->next;
delete tmp;
tmp=tmpNext;
}
(*Head)->next=0;
}
int main()
{
int num;
//cout<<"请输入要求阶乘的数:";
while(cin>>num){
Node **Head=new Node*();
calValue(num,Head);
cout<<outNode(Head)<<endl;
deleteAllNode(Head);
}
return 0;
}