經典輸入處理題:讀取「四位數字表示的時間」(如 1106 表示 11:06)與經過分鐘數,計算結束時間。小時為個位數時無前導零(如 530 表示 5:30)。分鐘數可超過 60 或為負數。保證同一天內。
輸入:1120 110
輸出:1310
解析:11:20 + 110分鐘 = 13:10
hour = time / 100,minute = time % 100total = hour * 60 + minute + deltanew_hour = total / 60,new_min = total % 60result = new_hour * 100 + new_min
#include <stdio.h>
int main() {
int time, delta;
scanf("%d %d", &time, &delta);
int total_min = (time / 100) * 60 + (time % 100) + delta;
int new_hour = total_min / 60;
int new_min = total_min % 60;
// 處理負分鐘情況(C語言%負數行為)
if (new_min < 0) {
new_min += 60;
new_hour -= 1;
}
int result = new_hour * 100 + new_min;
printf("%d\n", result);
return 0;
}
| 情況 | 處理 |
|---|---|
| 分鐘進位(≥60) | total_min / 60 自動進位小時 |
| 分鐘借位(負數) | C中 -5 % 60 = -5,需手動調整:+60, hour-1 |
| 小時個位數 | 直接 hour * 100,無前導零,符合題意 |
| 跨天 | 題目保證同一天,無需處理 24 小時循環 |
new_hour %= 24,負數加 2411:20:用 scanf("%d:%d", &h, &m)struct tm + mktime 處理複雜日期時間運算時間計算的核心是統一轉換為最小單位(分鐘/秒)運算,再轉回顯示格式。注意 C 語言負數取模行為,養成防御性調整習慣。此類題目考察基本運算、輸入解析與邊界處理能力。