uva 10916 Factstone Benchmark
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid;=8&page;=show_problem&problem;=1857 题意:计算最大的n,满足n!/* *********************************************** Author :111qqz Created Time :2016年01月29日 星期五 19时49分25秒 File Name :code/uva/10916.cpp ************************************************ */
#include
using namespace std; const double eps = 1E-8; const int dx4[4]={1,0,0,-1}; const int dy4[4]={0,-1,1,0}; const int inf = 0x3f3f3f3f; const int N=150; int n; int f[N]; void pre() { f[0] = 3; int per = 2; for ( int i = 1 ; i <=25 ; i++) { f[i]=f[i-1]+per; per++; } } int main() { #ifndef ONLINE_JUDGE freopen("code/in.txt","r",stdin); #endif
while (scanf("%d",&n)!=EOF) // (1*2*3*...*n)>2^k,巧妙利用对数求解。两边取对数即可。
{
if (n==0) break;
int k = (n-1960)/10;
int p = 1<<(k+2);
// cout<<"k:"<<k<<endl;
// cout<<"p:"<<p<<endl;
double dp = p*1.0*log(2); //因为不等式左边每一个都有一个log(2)(计算对数的时候用换底公式产生的),可以乘到不等号右边。
double sum = 0 ;
for ( int i = 1; ; i++)
{
sum +=log(i);
//cout<<"i:"<<i<<" sum:"<<sum<<endl;
if (sum>dp)
{
printf("%d\n",i-1);
break;
}
}
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}