(浮点数精度)
题意:求UTC+8时区的某个时间对应到另一个UTC+X.Y时区的时间为多少。
思路:将时区全部转换成分钟进行运算即可。
注意:这个题目坑点是浮点数计算存在精度误差,有时候需要手动加上一个eps(0.00001)来避免运算误差。
下面用一个for循环的实验来围观一下这个运算误差:
for (double offset=0.1; offset<10; offset+=0.1) {
int int_offset = (int)(60 * offset);
printf("%.2f %d\n", offset, int_offset);
}
输出结果:
0.10 6
0.20 12
0.30 18
0.40 24
0.50 30
0.60 36
0.70 42
0.80 47 (出现误差了!)
0.90 53 (出现误差了!)
1.00 59 (出现误差了!)
...
AC代码:
#include <stdio.h>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int T, a, b; char str[10], c;
scanf("%d", &T);
while (T --) {
double offset = 0;
scanf("%d %d UTC%c%lf", &a, &b, &c, &offset);
offset += 0.00001;
int time = 60*a + b - 8*60;
int int_offset = (int)(60 * offset);
time += c == '+'? int_offset : -int_offset;
time = (time + 5*1440) % 1440;
printf("%02d:%02d\n", time/60, time%60);
}
return 0;
}