求大整数阶乘的位数:
根据:一个数n的位数等于(int)log10(n)+1;
证明:设 10m-1<=n<10m,那么显然n的位数为m
log10(10m-1)<=log(n)<log10(10m)
m-1<=log(n)<m,
log10(n)<m<log10(n)+1
那么,m=(int)log10(n)+1
所以,n!的位数:(int) [log10(n*(n-1)*(n-2)*....*1)]+1=int(log10n+log10n-1+....+log101)+1
代码如下:
#include<iostream> #include<algorithm> #include<cmath> using namespace std; int main() { int t,n; cin>>t; for(int i=0;i<t;i++){ cin>>n; double result=0.0; for(int j=1;j<=n;j++){ result+=log10(j); } int r=(int)result+1; cout<<r<<endl; } return 0; }