求阶乘位数1018
求一个数有N多少位,可用log10(N)+1,于是,求N!有多少位 log10(1*2*3*……*n)=log10(1)+log10(2)+……+log10(N)+1
#include<iostream> #include<cmath> using namespace std; int main(){ int n,i,m,j; double d; while(cin>>n){ for(i=0;i<n;i++){ d=0; cin>>m; for(j=1;j<=m;j++){ d+=log10((double)j); cout<<d<<endl; } cout<<(int)d+1<<endl; } } return 0; } 1042 N! #include<iostream> #include<iomanip> using namespace std; int main(){ int n; while(cin>>n){ int i,j,k=0,a[10000]; a[0]=1; for(i=1;i<=n;i++){ int x=0; for(j=0;j<=k;j++){ a[j]=a[j]*i+x; x=a[j]/100000; a[j]%=100000; } if(x!=0){ k++; a[k]=x; } } cout<<a[k]; for(i=k-1;i>=0;i--) cout<<setw(5)<<setfill('0')<<a[i]; cout<<endl; } return 0; }