c++ - 从均匀网格中找到最接近的数字

标签 c++ algorithm

我有一个正整数 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/

相关文章:

java - 用于图像中文本检测的霍夫变换算法

algorithm - 渐近符号性质证明?

algorithm - 我不明白如何实现的概率(指数?)推理公式

c++ - map<string, object> 根据对象成员函数值排序

c++ - 如何为Windows CE 汽车音响建立cpp 项目?

c++ - 为什么当客户端忙于接收数据时 select() 有时会超时

c++ - 连接 QSqlDatabase 有什么区别?

c++ - 如何使用 waitpid() 获取子进程的状态?

algorithm - 装箱,决策与优化

javascript - Heapsort算法,把最小的元素放在最后