n!的位數
阿新 • • 發佈:2018-12-30
給一個整數n(n<1e7)求n!有多少位
1用log10來算:
log(10)a*b=log(10)a+log10(b)
一個數a的位數位log(10)a+1;
(1)如果要求log以a為底n的對數:log(n)/log(a)
#include<stdio.h> #include<cmath> #include<iostream> using namespace std; int main() { int n,t; double sum; cin>>t;//測試樣例的數目 while(t--){ cin>>n;//輸入數字n sum=0;//初始化sum for(int i=1;i<=n;i++) sum+=log10((double)i);//n階乘的位數 cout<<(int)sum+1<<endl; } return 0; }
2用斯特林公式
k!≈√(2kπ)*(k/e)^k
log10(k!)=k *log10(k/e)+log10(√2kπ)(log10(k!)+1為k!的位數)
(1)一個快速取pi的方法“const double pi=acos(-1.0)”;
#include<stdio.h> #include<cmath> #include<iostream> #include<queue> using namespace std; const double pi=acos(-1.0); const double e=2.718281828459; int main() { int n; cin>>n;//樣例的個數 while(n--){ double a;//輸入資料 int L; cin>>a; L=(int)(a*log10(a/e)+log10(sqrt(2*pi*a))); cout<<L+1<<endl;//階乘的位數 } return 0; }