【发布时间】:2021-02-17 09:47:56
【问题描述】:
以时间为例:如果我们有开始时间和结束时间,那么找出它们之间的小时数的最佳方法是什么?
如果我们采用 12 小时制,我们会得到以下结果
- 从 1 到 5 = 4
- 从 11 到 1 = 2
最有效的方法是什么?
【问题讨论】:
-
如果您的输入始终是整数,那么您将很难胜过 在预先计算的数组中查找 方法。
以时间为例:如果我们有开始时间和结束时间,那么找出它们之间的小时数的最佳方法是什么?
如果我们采用 12 小时制,我们会得到以下结果
最有效的方法是什么?
【问题讨论】:
【讨论】:
((b + 12) - a) % 12 进行比较,他的解决方案快1.9 倍,但我不知道使用在编译时解决的const_expr 是否非常可靠,测试应该在运行时完成。
constexpr 在这里并没有什么区别,因为基准测试使用可变参数调用函数,所以所有调用都发生在运行时。
volatile
假设时钟为 12 小时制,则从 a 到 b 的小时数可以计算为:
difference = ((b + 12) - a) % 12;
这也假设a 和b 都在[1, 12] 范围内。如果不是,您可以这样做:
a %= 12;
b %= 12;
在进行差异计算之前。
【讨论】: