PAT乙级1026

74 阅读1分钟

image.png 这是一道比较水的题目,唯一的问题是数据的处理。

格式输出;不足 1 秒的时间四舍五入到秒。

那就涉及到一点精度的问题,用double存一些数据来保持精度。

//foreverking
#include <vector>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;

const int CLK_TCK = 100;

double c1,c2;
//在一行中输出被测函数运行的时间。运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出;不足 1 秒的时间四舍五入到秒。

//检查是否需要输出0
void check(int x){
    if(x < 10)
        cout << '0';//小于10请补齐
}

int main(){
    int hour,mi,sc;
    cin >> c1 >> c2;
    double res = (c2 - c1) / CLK_TCK;
    hour = res / 3600;
    mi = (res - 3600 * hour) / 60;
    sc = (res - 3600 * hour - 60 * mi) + 0.5;
    check(hour);
    cout << hour << ':';
    check(mi);
    cout << mi << ':';
    check(sc);
    cout << sc << endl;
}

这里有个小技巧四舍五入的小技巧 int (a+0.5)。当然你也可以在一开始的时候,(c1 - c2 + 50) / CLK_TCK 效果是一样的,都是为了让不足一秒的当做一秒。你也可以试试向上取整的ceil函数~

题目链接