hdu1141
参考代码:
http://blog.sina.com.cn/s/blog_4d88e9860100cnl4.html
主要还是关于log与位数的关系(具体hdu1008),这道题进一步说明了,把log后的值四舍五入比较接近正确的值(这样说对吗?严谨吗?),如果不注意可能会wr在这里。
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> using namespace std; #define N 310 int bitnum[N]; int main(){ for(int i=0;i<201;i++){ bitnum[i]=1<<((i/10)+2); } int n=3; double length=3.0; int ilength=3; for(int i=0;i<201;i++){ while(ilength/*注释中所指替换这里前面的*/<=bitnum[i]){//一开始直接在这里(int)length就出错了,如果直接length也会出错,但是换成ilength后经过一些处理就可以了 length+=log2((++n)*1.0); /*if(n<=100){//经初步验证5!和6!,length四舍五入时,与正确值相等 printf("%lf %d\n",length,n); }*/ ilength=(int)length<(int)(length+0.5)?(int)length+1:(int)length; } bitnum[i]=n-1; if(i%10==0){ //printf("%lf %d %d\n",length,i+1960,bitnum[i]); } } int num; while(scanf("%d",&num)!=EOF&&num!=0){ printf("%d\n",bitnum[num-1960]); } return 0; }