设计思路:
- 整数除法是截断取整,故四舍五入通过原始值加 50 实现(加 50 是因为除数是 100)
编译器:C (gcc)
#include <stdio.h>
int main()
{
int c1, c2, t;
scanf("%d %d", &c1, &c2);
t = (c2 - c1 + 50) / 100;
printf("%02d:%02d:%02d\n", t/3600, t%3600/60, t%60);
return 0;
}
补充:
- 直接用除法无法实现进位
数值范围 t | 直接计算(即截断取整) |
---|---|
[0, 49] | t / 100 = [0.00, 0.49] = 0 |
[50, 99] | t / 100 = [0.50, 0.99] = 0 |
- 如下实现四舍五入,把原来的区间向右增加了 0.5 个单位
- 相当于在计算结果前,就已经手动完成了进位
手动实现四舍五入 | 除法计算(即截断取整) |
---|---|
[0, 49] + 50 → [50, 99] | (t + 50) / 100 = [0.50, 0.99] = 0 |
[50, 99] + 50 → [100, 149] | (t + 50) / 100 = [1.00, 1.49] = 1 |
其他思路:
// 根据余数是否大于等于 50,来决定结果是否加 1
// 但取余运算 %,相对加法运算更耗时
c = c2 - c1;
if (c % 100 < 50) {
t = c / 100;
} else {
t = c / 100 + 1;
}