请求一个巨阶算法:1000000!
请说明解答过程及原理!谢谢!
#include <iostream.h> #include <iomanip.h> #include<math.h> #include<stdlib.h>
int get();//输入n int getBitNum(int n);//得到结果有多少位 char* init(int size);//动态分配空间 void calc(char* a,int n);//计算结果 void display(char *a,int size);//显示结果
void main() { int n=get(); int size=getBitNum(n); char *pa=init(size); calc(pa,n); display(pa,size); delete[]pa; }
int get() { int n; cout<<"请输入n:"; cin>>n; while(n<0) { cout<<"请重新输入n:"; cin>>n; } if(n==0) exit(1); return n;
}
int getBitNum(int n) { double m=1.0; for (int i=1;i<=n;i++) m+=log10(i); return (int)m; }
char* init(int size) { char *pa=new char[size]; if(!pa) { cout<<"分配空间失败"<<endl; exit(1); } pa[0]=1; for(int i=1;i<=size;i++) pa[i]=0; return pa; }
void calc(char* a,int n) { int begin=0; // int sum=0; double bitcount=1; for(int i=2;i<=n;i++) { long jin=0; bitcount+=log10(i); if(a[begin]==0) begin++; for(int l=begin;l<int(bitcount);l++) { jin+=i*a[l]; a[l]=char(jin%10); jin=jin/10; } } }
void display(char *a,int size) { int bit=0; for(int j=size-1;j>=0;j--) {if(bit%50==0) cout<<endl<<"第"<<setw(3)<<(bit/50+1)<<"个50位:"; cout<<(int)a[j]; bit++; } cout<<endl; } 原来写的,自己慢慢看吧,可能还要稍作修改,主要是数据类型。