c语言90分,第九个点过不去,求助大佬

P5707 【深基2.例12】上学迟到

```c #include<stdio.h> #include<math.h> int main() { int time,s,c,v,m,H,M; int t; scanf("%d%d", &s, &v); t = s / v; if (s % v) { t++; } time = t; if (time <= 470) { m = 470 - time; } else { m = 1910 - time; } M = m % 60; H = (m - M) / 60; if(H<10) { if(M<10) { printf("0%d:0%d", H, M); } else { printf("0%d:%d", H, M); } } else { if (M < 10) { printf("%d:0%d", H, M); } else { printf("%d:%d", H, M); } } } ```
by Cload_Honor @ 2023-09-21 22:29:41


@[yoiuqiou](/user/1104708) 调好了
by Cload_Honor @ 2023-09-21 22:38:24


谢谢大佬@[C_handsome](/user/827220) 还有一个问题就是: t = round(t + 0.5);time = t;和if (s % v) {t++;}都是实现向上取整,但是为什么前者在题目中第九个监测点wa,而后者则可以完美通过呢?
by yoiuqiou @ 2023-09-22 07:15:54


@[yoiuqiou](/user/1104708) 这个我也不知道,用ceil的话就只有#9对了
by Cload_Honor @ 2023-09-22 20:20:49


@[yoiuqiou](/user/1104708) 主要我是学c++的,c就学过一点,所以蒟蒻帮不了太大的忙
by Cload_Honor @ 2023-09-22 20:32:39


@[yoiuqiou](/user/1104708) 似乎是精度问题
by Cload_Honor @ 2023-09-22 20:34:16


@[yoiuqiou](/user/1104708) 对了这个输出可以这样 ```c if (H < 10) { printf("0"); } printf("%d", H); printf(":"); if (M < 10) { printf("0"); } printf("%d", M); ```
by Cload_Honor @ 2023-09-22 20:42:01


@[C_handsome](/user/827220) 谢谢大佬,已经帮我很多啦。 后面的输出也是,太巧妙了!我根本没想到。 还有就是关于t=round(t+0.5);time=t;的问题。确实存在精度问题,尤其是当t非常大或者非常小的时候,超过了double的精度的就会出问题。比如round(0.5+10^-100)就会输出0而不是理论上的1。 并且还有就是t= round(t+0.5); 会涉及到浮点数的运算,效率比较低。如果是if (s % v) {t++;}的话就既不会出现精度问题,也只涉及整型计算,效率更高。
by yoiuqiou @ 2023-09-23 10:17:08


|