【发布时间】:2014-02-17 10:55:30
【问题描述】:
我有一个整数正数n。比如说n=5。如果我们查看 n 的倍数,我们会看到这些数字(我们称之为 n-grid)[... -15, -10, -5, 0, 5, 10, 15, ...]。现在我需要编写一个函数F(n, N),给定一个整数N,从那个n-grid输出一个最接近的数字。例如,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;
}
它似乎有效,但不喜欢它的外观。有人可以提出任何改进建议吗?
【问题讨论】:
-
F(4,2)的结果是什么? IE。这种舍入方法是向上还是向下舍入?那么 F(4,-2) 呢?它是向上取整还是远离零?
-
如果您只是想改善外观,这应该是一个品味问题。您可以更改为: int const x = (N>0?1:-1)*(::abs(N) + (n / 2)) / n) * n;