這個題的意思就是求 N!<2^bitide
兩邊同時取對數,獲得 log(N!)<bit*log(2.0),變換形式獲得 log(N!)/ log(2.0)<bit;spa
log(N!)=log(1*2*3*4*……N)=log(1)+log(2)+log(3)+log(4)+……log(N);3d
則問題轉化爲求: log(1)/ log(2.0)+ log(2)/ log(2.0)+ log(3)/ log(2.0)+…… log(N)/ log(2.0)<bit code
從而避免了大數計算,利用對數直接比較,將問題簡單化blog
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int n,i; 6 __int64 t; 7 double ans; 8 while(scanf("%d",&n),n!=0) 9 { 10 t=(n-1960)/10+2; 11 t=1<<t; 12 i=0; 13 ans=0; 14 while(ans<t) 15 { 16 ans+=log((double)(++i))/log(2.0); 17 } 18 printf("%d\n",i-1); 19 } 20 return 0; 21 }