【C++/PTA】計算時間の減算

トピックの要件

タイトルの説明: 時間クラスを定義します。時間と分は、その 2 つのプライベート メンバー データです。開始時刻と終了時刻 (開始時刻は終了時刻より早い) を入力し、演算子のオーバーロード - (マイナス記号) を使用して 2 つの時刻の間の分数を計算します。説明: これら 2 つの時間は同じ 1 日内であり、24 時間のタイミング式、つまり 00:00 ~ 23:59 を使用します。

入力形式: テスト入力には複数のテスト ケースが含まれており、各テスト ケースは 1 行を占めます。各テスト ケースにはスペースで区切られた 4 つの数字が含まれます。各数字は 2 桁で構成されます。最初の数字と 2 番目の数字は開始時刻の時と分を表し、3 番目と 4 番目の数字は開始時刻の時と分を表します。それぞれ終了時刻。テストケースの入力が 00 00 00 00 の場合、入力が終了し、対応する結果は出力されません。

出力形式: テスト ケースごとに 1 行を出力します。2 つの間の分数を示す数値を出力するだけです。

入力例:
12 11 12 58
00 13 16 00
09 07 23 59
00 00 00 00

出力例:
47
947
892

問題解決のアイデア

Time次のプライベート メンバー変数を使用して名前を付けたクラスを定義します。

  • hour: 時間
  • minute: 分

および次のパブリック メンバー関数:

  • コンストラクター: 時間と分のパラメーターを渡すことができます。
  • Friend 関数operator-: タイプ (単位: 分) の 2 つのオブジェクト間の時間差を計算する-演算子Time

operator-関数では、時間判定の考え方を利用して、2つの時間の差を分単位で計算します。

別々に読み取った2つのTime物体、p.minuteq.minuteより小さいか等しい場合は、その点全体を通過していないことを意味し、時間と分の差から直接時差を計算します。それ以外の場合は、時点p全体q時差を取得するには、時間に 1 を加え、分に 60 を加え、それを時間と分の差に加算する必要があります。

main()関数では、ループと を使用して、cin複数の時刻データを読み取ります。

読み取られた 4 つの数値がすべて 0 の場合、ループを終了します。それ以外の場合は、 およびTimep1p2入力された時間と分をパラメータとして渡します。

時間差を引いた結果を変数にp2代入し、最後に出力します。p1differencedifference

コード

#include<iostream> 
using namespace std;  

// 声明类 Time
class Time {
    
    
private:
    int hour;  // 小时数
    int minute;  // 分钟数
public:
    // 构造函数,默认参数值为 0
    Time(int h = 0, int m = 0) {
    
    
        hour = h;
        minute = m;
    }
    // 友元函数 operator- 的声明
    friend int operator- (Time p, Time q);
};

// 定义友元函数 operator-
int operator- (Time q, Time p) {
    
    
    int c = 0;  // 定义时间差变量
    int d = 0;  // 定义小时差变量
    if (p.minute < q.minute || p.minute == q.minute) {
    
      // 如果第一个时间比第二个时间早或相等
        d = q.hour - p.hour;  // 计算小时差
        c = q.minute - p.minute + 60 * d;  // 计算时间差(单位:分钟)
        return c;  // 返回时间差
    }
    else {
    
      // 如果第一个时间比第二个时间晚
        d = q.hour - p.hour - 1;  // 计算小时差
        c = 60 + q.minute - p.minute + 60 * d;  // 计算时间差(单位:分钟)
        return c;  // 返回时间差
    }
}

// 主函数
int main() {
    
    
    int a, b, c, d;  // 定义输入的四个整数
    while (cin >> a >> b >> c >> d) {
    
      // 循环读取多组数据
        if (a == 0 && b == 0 && c == 0 && d == 0)  // 如果读到的数据均为 0
            break;  // 跳出循环
        int difference;  // 定义时间差变量
        Time p1(a, b);  // 创建 Time 类型对象 p1,并传入小时数和分钟数作为参数
        Time p2(c, d);  // 创建 Time 类型对象 p2,并传入小时数和分钟数作为参数
        difference = p2 - p1;  // 计算 p2 与 p1 的时间差,并赋值给 difference
        cout << difference << endl;  // 输出时间差(并换行)
    }
    return 0;  // 返回 0,代表程序顺利结束
}

要約する

このトピックでは主に运算符重载次のことを調べます。友元函数的使用方法

私はです、また会いましょう。

おすすめ

転載: blog.csdn.net/2301_77485708/article/details/131220227