Nhập giờ bắt đầu và giờ kết thúc (giờ, phút, giây), tính hiệu.
Thuật toán xử lý mượn
while (stop.sec > start.sec) { start.min--; start.sec += 60; }
diff.sec = start.sec - stop.sec;
while (stop.min > start.min) { start.hrs--; start.min += 60; }
diff.min = start.min - stop.min;
diff.hrs = start.hrs - stop.hrs;
Chương trình
#include <stdio.h>
struct Time { int hrs, min, sec; };
void diff(Time start, Time stop, Time *d) {
while (stop.sec > start.sec) { start.min--; start.sec += 60; }
d->sec = start.sec - stop.sec;
while (stop.min > start.min) { start.hrs--; start.min += 60; }
d->min = start.min - stop.min;
d->hrs = start.hrs - stop.hrs;
}
int main() {
Time start, stop, d;
printf("Gio bat dau (h m s): "); scanf("%d%d%d", &start.hrs, &start.min, &start.sec);
printf("Gio ket thuc (h m s): "); scanf("%d%d%d", &stop.hrs, &stop.min, &stop.sec);
diff(start, stop, &d);
printf("Hieu: %d:%d:%d - %d:%d:%d = %d:%d:%d\n",
start.hrs, start.min, start.sec,
stop.hrs, stop.min, stop.sec,
d.hrs, d.min, d.sec);
return 0;
}
Kết quả
Gio bat dau: 12 45 57 Gio ket thuc: 20 35 20 Hieu: 12:45:57 - 20:35:20 = -8:10:37
Lưu ý: Kết quả âm nếu giờ kết thúc sau giờ bắt đầu. Có thể lấy giá trị tuyệt đối hoặc xử lý qua ngày.