过万n的阶乘的代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
struct Factorial
{
int digit;
struct Factorial *next;
};
void Input(int &n)
{
cout << "Please the n: ";
cin>> n;
cout < } void Output(struct Factorial *first, int n) { struct Factorial *p=first; struct Factorial *q=p-> next; int count=0; if(first-> next!=NULL)//如果链表节点个数大于1,则把链表逆置{ while(q!=NULL) { p-> next=q-> next; q-> next=first; first=q; q=p-> next; } } cout < p=first; while(p!=NULL)//输出 { count++; cout < p=p-> next; if(!(count%100)) cout << " sum= " < void FactorialN(struct Factorial* first, int ier) { struct Factorial *p=first; struct Factorial *q=new struct Factorial; int temp=0; int flag=1; int x,y; do { p-> digit=p-> digit*ier+temp; temp=0; if (p-> digit>=10)//进位处理 { if(p-> next!=NULL)//所处理的进位节点不是尾节点{ temp=p-> digit/10; p-> digit=p-> digit%10; } else//所处理的进位节点是尾节点 {flag=0; x=p-> digit/10; y=p-> digit=p-> digit%10; while(y> -1) { if(x <10) {q-> digit=x; q-> next=NULL; p-> next=q; y=-1; q=new struct Factorial; } else { q-> digit=x%10; q-> next=NULL; p-> next=q; p=q; q=new struct Factorial; x=x/10; y=x%10; } } } } p=p-> next; }while(p!=NULL&&flag); delete q; } void main() { struct Factorial *first=new Factorial; int n; first-> digit=1;//链表默认值是1,即0!或1! first-> next=NULL; Input(n); if(n==0||n==1) Output(first,n); else//n> 2时的阶乘 { for(int i=1;i FactorialN(first,i+1); Output(first,n); } cout << "Press any key to continue! " < }