本文主要是介绍hdu 1141 Factstone Benchmark,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
主题思想: 用对数来缩小数的量级。
因为数实在太大了。
n!<2^x. 给出x 求出n.
利用对数把乘法变成加法,且减小量级。
log2(n!)<log(2^x)=x
log2(1)+log2(2)+...+log(n)<x
AC 代码
#include <iostream>
#include<cstdio>
#include<cmath>
using namespace std;const int maxn=21;
int a[maxn];double Log(int n){return log10(n*1.0)/log10(2.0);
}int main()
{// init a[for(int i=0;i<maxn;i++){a[i]=pow(2,i+2);}int y;while(scanf("%d",&y)&&y!=0){int i=(y-1960)/10;double d;int j=1;d=0;while(d<a[i]){d+=Log(j++);//or Log(++j)}// j-1printf("%d\n",j-2);}return 0;
}
这篇关于hdu 1141 Factstone Benchmark的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!