1、这题一开始没有思路,到网上搜了别人的解题报告,发现用对数做的。
2、涉及超大幂的比较,应该用对数把数值降下来。阶乘加一个对数符号可转化为加法,这样就不会溢出。注意c语言中ln是log,lg是log10。
#include <stdio.h>
#include <math.h>
int main(void)
{
int n,temp,i;
double ans,temp1;
while(scanf("%d",&n)==1)
{
if(n==0) break;
temp=(n-1960)/10+2;
temp1=(int)pow(2.0,(double)temp)*log(2.0);
i=1;ans=0.0;
while(ans<temp1)
{
i++;
ans+=log((double)i);
}
printf("%d\n",i-1);
}
return 0;
}