TommyBay @ 2020-02-04 18:56:25
已知以下数学等式成立:
在问题P1618中,已知比例a和b,暴力枚举x,得到y,那么数学公式应该为:
可是我发现C语言中,以下三种写法的效果是不同的:
int y=x*b/a;
int y=x/a*b;
int y=b/a*x;
当a==123,b==456时,只有第一种可以正确AC(走运飘过),第二种会多一个x==132的错误情况,第三种则No!!!。 才开始学C语言,这是怎么回事?求大犇们指导一下到底是怎么回事,谢谢。
by 死神审判 @ 2020-02-04 19:01:14
@bigheadcat 按照运算顺序,当然2,3不对了。
by WYXkk @ 2020-02-04 19:04:03
@bigheadcat 因为 C/C++ 中 整数/整数 自动下取整,所以后两种先除会炸。。。
by WYXkk @ 2020-02-04 19:04:55
比如 2*3/5
得到 1
但 2/5*3
得到 0
by 死神审判 @ 2020-02-04 19:10:25
@bigheadcat 这是int类型,会有误差。
by TommyBay @ 2020-02-04 21:53:52
@死神审判 谢谢大哥。我还想问一下,这三种顺序都是整型相除,是不是说依然存在漏洞?
by TommyBay @ 2020-02-04 21:55:05
@WYXkk 谢谢大哥。我还想问一下,这三种顺序都是整型相除,是不是说依然存在漏洞?也就是说,这种办法并不是完美的,如果本题数据加强,则依然无法通过。
by 死神审判 @ 2020-02-04 21:55:10
@bigheadcat 是的