Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
貌似这样要用__int64才能AC…In Reply To:教大家一个不使用浮点数的方法 Posted by:aoxboxcox at 2009-04-01 13:43:45 WA了好几次不明所以,然后把所有的int改成__int64,把%d改成%lld就过了 感觉是由于中间计算的越界,就是这句:if(q2*abs(a*q1-b*p1)<q1*abs(a*q2-b*p2)) 但是目前还没找到越界的例子…… > 晕,怎么这么多人在使用double,而且还有讨论精度的问题。 > 不过,我也相信不少人看了标题就知道我要说什么了。 > 知道的人就不用往下看了,直接点返回吧。 > > > > > > 不知道的继续。 > (1)假设假设输入是a/b,需要近似成p/q > 在知道q的情况下,怎么求p? > 很简单:p=(double)(q*a)/(double)b+0.5; > 这是唯一需要在中间过程加入浮点转型的。 > > (2)假设输入是a/b,已经近似成p/q > 在a,b没有约分的情况下,怎么判断a/b=p/q? > 也很简单:if(a*q==b*p) > > (3)假设输入是a/b,近似成p1/q1和p2/q2 > 怎么判断p1/q1比p2/q2更接近a/b? > |p1/q1 - a/b| < |p2/q2 - a/b| > <==>|a*q1-b*p1|/(b*q1) < |a*q2-b*p2|/(b*q2) > <==>q2*|a*q1-b*p1| < q1*|a*q2-b*p2| > 所以是:if(q2*abs(a*q1-b*p1)<q1*abs(a*q2-b*p2)) > > > 可以了,现在这道题目已经变得超简单了,各位继续吧。 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator