# Arithmetic# Time Conversion

f706 - 時區 (Zone)

🔗 前往 ZeroJudge 原題

題目描述

題目給定兩個時間點,要求計算它們之間的時間差,並將時間差轉換為一個新的時間表示形式。具體來說,輸入包含兩個時間,分別是起始時間和結束時間,格式為 時:分:秒。程式需要計算從起始時間到結束時間經過了多少分鐘,然後將這個分鐘數轉換為 時:分:秒 的格式,並輸出結果。需要注意的是,時間差可能跨越一天或多天,因此需要進行適當的調整。

解題思路

這題主要考驗對時間運算和轉換的理解。程式首先將兩個時間點轉換為分鐘數,然後計算分鐘數的差值。由於時間差可能為負數,因此需要進行調整,使其為正數。最後,將分鐘數差值轉換回 時:分:秒 的格式,並輸出結果。程式中使用了整數除法和取模運算來進行時間的轉換和調整。由於時區的循環特性,需要對小時數進行模 36 運算,以確保結果在 0 到 35 的範圍內。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	int a,b,c,d;
	cin >> a >> b >> c >> d;
	b+=a*60+(d*90);
	a=0;
	while(b<0){
		--a;
		b+=60;
	}
	a+=b/60;
	b%=60;
	while(a<0){
		a+=36;
	}
	cout << a%36 << ":" << b/10 << b%10 << ":" << c/10 << c%10 ;
}

Discussion