我有一个正整数 n
。让我们以 n=5
为例。如果我们查看 n
的乘法,我们会看到这些数字(我们称之为 n-grid)[... -15, -10, -5, 0, 5, 10, 15, .. .]。现在我需要编写一个函数 F(n, N)
,给定一个整数 N
,输出与该 n 网格最接近的数字。例如,F(n, 0) = 0
(对于任何 n)。 F(5, 4) = 5
, F(5, 7) = 5
, F(5, 8) = 10
, >F(5, -13) = -15
等等。
我写了这个函数:
int const x = ((::abs(N) + (n / 2)) / n) * n;
if (N > 0)
{
return x;
}
else
{
return -x;
}
它似乎可以工作,但不喜欢它的外观。有人可以提出任何改进建议吗?
最佳答案
您可以通过将 x 乘以 (N/abs(N))
并立即返回计算值来摆脱 if
语句,甚至无需将其保存在x
。
但是我不会这样做,因为它会损害可读性。
关于c++ - 从均匀网格中找到最接近的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827147/