N!的最高位
这里给出我的代码:
#include <iostream>
#include <cmath>
using namespace std;
int firstDigit(int n)
{
int k=0; //位数
double t=0; //lg(n!)
for(int i=2;i<=n;i++)
{
t+=log10(i);
}
k=(int)t+1;
return (int)(pow(10,t-k+1)+1e-10)%10;
}
int main()
{
int n;
while(cin>>n) {
cout<<firstDigit(n)<<endl;
}
return 0;
}
这里n最大为10000000
哪位大大有更快的算法?
[解决办法]
可以用斯特林近似来求,或先求log的加和,再返回估算结果。
http://blog.csdn.net/liangbch/archive/2007/04/13/1563395.aspx
[解决办法]
已经是非常好的了吧,确定是足够的精确的话,就是很正确的啦。
还要快的话,大概就是一些对求log的优化吧
[解决办法]
数学归纳法。
[解决办法]
log和pow都很费时,这样可以不?
int Factorial(long n){ long long s = 1 ; for (int i = 2; i <= n; i++) { s *= i ; while (s > 100000000) { s /= 10 ; } } while (s >= 10) { s /= 10 ; } return s ;}
[解决办法]
楼上这样求结果不对啊
while (s > 100000000)
{
s /= 10 ;
}
这样除不行
[解决办法]
MARK...
[解决办法]