【发布时间】:2021-08-03 17:45:39
【问题描述】:
这感觉像是一个基本问题,但到目前为止我找不到明确的答案。
我想实现一个高效的函数round_to_nearest(int x, int multiple),将有符号整数x四舍五入为multiple的最接近的倍数,尽可能避免使用浮点运算。
示例输出:
round_to_nearest(14, 5);
15
round_to_nearest(16, 5);
15
round_to_nearest(23, 5);
25
round_to_nearest(22, 5);
20
round_to_nearest(-23, 5);
-25
round_to_nearest(-22, 5);
-20
【问题讨论】:
-
将
x除以multiple(整数除法)。然后从那里往两个方向(上和下)走,看看哪个“更近”。当心极端情况。 -
round_to_nearest(9, 6);这种模棱两可的情况应该怎么办? -
或
round_to_nearest(-9, 6)?和round_to_nearest(-9, -6)一样吗?你希望它是对称的还是标准的? -
应该可以只用一个
%操作,加上加法和减法,而不是同时需要除法和乘法。 -
问题已经回答了,但是为了澄清原始问题,我并不关心一个倍数和下一个倍数中间的值的模棱两可的情况,我假设
multiple的正值