首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言經典題解:時間加法 (時:分:秒 進位邏輯)

     編輯:關於C

題目:人見人愛的 A+B — 時間版

給定兩個時間 (時、分、秒),計算它們的和,正確處理**秒滿 60 進分、分滿 60 進時**。

輸入輸出格式

  • 第一行:測資筆數 num
  • 每筆:a b c d e f (第一組時間的時分秒 + 第二組時間的時分秒)
  • 輸出:合併後的時間 x y z (時 分 秒)

核心邏輯:進位處理

// 秒相加
z = c + f;
if (z >= 60) { y++; z -= 60; }  // 或 z %= 60; y += z / 60;

// 分相加 (含秒進位)
y += b + e;
if (y >= 60) { x++; y -= 60; }  // 或 y %= 60; x += y / 60;

// 時相加 (含分進位)
x += a + d;
// 時無上限 (題目未限制 24 小進位)

完整標準解答

#include 

int main() {
    int num;
    if (scanf("%d", &num) != 1) return 0;

    while (num--) {
        int a, b, c, d, e, f;
        scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f);

        int x = a + d;
        int y = b + e;
        int z = c + f;

        // 秒進位
        if (z >= 60) {
            y += z / 60;
            z %= 60;
        }
        // 分進位
        if (y >= 60) {
            x += y / 60;
            y %= 60;
        }

        printf("%d %d %d", x, y, z);
        if (num > 0) putchar('\n');
    }
    return 0;
}

進階:通用時間結構體與加法函式

typedef struct {
    int hour;
    int min;
    int sec;
} Time;

Time time_add(Time t1, Time t2) {
    Time res;
    res.sec = t1.sec + t2.sec;
    res.min = t1.min + t2.min + res.sec / 60;
    res.sec %= 60;
    res.hour = t1.hour + t2.hour + res.min / 60;
    res.min %= 60;
    return res;
}

// 24 小制版本 (若需)
Time time_add_24h(Time t1, Time t2) {
    Time res = time_add(t1, t2);
    res.hour %= 24;
    return res;
}

測試案例

輸入輸出說明
1 10 20 30 2 30 40 503 51 2030+50=80秒→1分20秒; 20+30+1=51分
1 0 59 59 0 0 21 0 159+2=61秒→1分1秒; 59+0+1=60分→1時0分
1 23 59 59 0 0 124 0 0跨日 (若無 24h 模)

常見錯誤

  • 忘記秒進位後分可能再進位 (需循環或連續處理)
  • 用 if (z > 60) 而非 >= (60 秒須進位)
  • 輸出格式多餘空白/換行 (OJ 嚴格比對)
  • 未處理多筆測資間的換行

延伸:時間差、比較、格式化輸出

int time_cmp(Time t1, Time t2) {  // 回傳 1: t1>t2, 0: 相等, -1: t1 t2.hour ? 1 : -1;
    if (t1.min != t2.min) return t1.min > t2.min ? 1 : -1;
    if (t1.sec != t2.sec) return t1.sec > t2.sec ? 1 : -1;
    return 0;
}

void time_print(Time t) {
    printf("%02d:%02d:%02d", t.hour, t.min, t.sec);
}

總結

時間加法是**進位制運算**的經典應用。掌握「個位進位 → 十位 → 百位...」的連續處理模式,同樣適用於日期計算、大數加法、多精度運算等場景。關鍵:用除法取商進位、取餘保留當前位,簡潔且不易出錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved