题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=32
下面这个方法的思路是没问题的,提交也AC了,但是由于浮点数的精度问题,其实测试部分数据会出现诡异的输出。
见下面这个帖子的讨论:http://www.cskaoyan.com/thread-188998-1-4.html
C语言源码:
#include<stdio.h>
#include<math.h>
int depth(int m)
{
return (int)(log(m)/log(2));
}
int main()
{
int m,n,li,bi;
scanf("%d %d",&m,&n);
while(m!=0||n!=0)
{
li=m;
while(li*2<=n)
li=li*2;
bi=m;
while(bi*2+1<=n)
bi=bi*2+1;
if(depth(li)<depth(n))
printf("%d\n",(int)pow(2,depth(li)-depth(m)+1)-1);
else
if(depth(bi)==depth(n))
printf("%d\n",(int)pow(2,depth(bi)-depth(m)+1)-1);
else
printf("%d\n",(int)pow(2,depth(bi)-depth(m)+1)-1+n-li+1);
scanf("%d %d",&m,&n);
}
}
本文探讨了一个C语言程序中处理浮点数精度问题的方法,并通过实例展示了如何在程序中应用该方法来避免输出误差。通过讨论和代码实现,读者可以了解在处理数学运算时,特别是涉及指数和对数等操作时,如何正确处理浮点数的精度问题。
369

被折叠的 条评论
为什么被折叠?



