题目大致意思
就是让你找一个数n,使得这个数的阶乘小于2的num次方,num表示给定年份的计算机的位数,1960年4位,1980年16位,就是每十年增加二倍。
步骤
先解出给定年份的计算机位数。
归纳为求 n!< 2^num 的最大的n
两边同时取对数,log10(n!) < log10(2^num)
变形为 log10(n!) < num*log10(2)
即 log10(n!)/log10(2) < num n!可以在展开
代码如下
#include<cstdio>
#include<cmath>
#include<iostream>
#define PI 3.1415926
using namespace std;
int main(){
int y;
while(scanf("%d",&y)&&y){
int bi=(y/10)-196;
int num=4,i;
double sum=0;
for(int i=0;i<bi;i++){
num*=2;
}
for(i=1;;i++){
sum+=log10(i)/log10(2);
if(sum>num){
break;
}
}
cout<<i-1<<endl;
}
return 0;
}