快轉到主要內容

b981. YoJudge 預練(時間之章)

·231 字·2 分鐘·
ChengHao Yang
作者
ChengHao Yang
SRE / CNCF Ambassador
目錄

題目 Problem
#

題目連結:https://zerojudge.tw/ShowProblem?problemid=b981

敘述 Description
#

 前幾天看到一隻 b961 YoJudge怪獸,感覺太強大了,所以先打Lo練功,期盼來日再戰YoJudge怪獸。  這次任務較簡單,將以下各種格式的時間單位統一轉換為毫秒。 以下 x,y,z,a,b皆為非負整數 可能出現的時間單位格式如下: xhour :代表 x 小時, 0<=x<24 xhym :代表 x 小時又 y 分鐘, 0<=x<24, 0<=y<60 xhymzs :代表 x 小時又 y 分鐘又 z 秒, 0<=x<24, 0<=y<60, 0<=z<60 ymin :代表 y 分鐘, 0<=y<60 ymzs :代表 y 分鐘又 z 秒, 0<=y<60, 0<=z<60 zs :代表 z 秒, 0<=y<60, 0<=z<60 z.as :代表 z 秒又 a*100毫秒, 0<=z<60, 0<=a<10 bms :代表 b 毫秒, 0<=b<1000

輸入 Input
#

多行直到 EOF,每行只有如上題目所說的時間格式,沒有空格

輸出 Output
#

將輸入的每一行換算為毫秒,輸出一行整數

範例輸入 Sample Input
#

13hour
9h20m
23h17m57s
6min
34m50s
8s
19.7s
567ms

範例輸出 Sample Output
#

46800000
33600000
83877000
360000
2090000
8000
19700
567

提示 Hint
#

題解 Solution
#

數字會先讀取,所以先存數字到 $tmp$ 裡面 讀到 $h$ 可能是 $h$ 或 $hour$,要自己判斷 讀到 $m$ 可能是 $m$ 或 $min$ 或 $ms$,$ms$ 是毫秒,要另外區隔 要注意小數點,反正小數點也只會在 $s$ 出現 出現小數點,就直接把數字放在 $s$ 就好 小數點後的數字另外判斷

程式碼 Accepted Code
#

#include <bits/stdc++.h>
#define _ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
int main(){
	_
	string enter;
	while(cin>>enter){
		int h=0,m=0,s=0,dot=0,ms=0,tmp=0,dotyes=0;
		for(unsigned int i=0;i<enter.length();i++){
			if(enter[i]=='.'){
				s=tmp;
				dotyes=1;
				tmp=0;
			}
			else if('0'<=enter[i]&&enter[i]<='9'){
				tmp*=10;
				tmp+=enter[i]-'0';
			}
			else if(enter[i]=='h'){
				if(i+1<enter.length()){
					if(enter[i+1]=='o'){
						h=tmp;
						i+=3;
					}
					else{
						h=tmp;
					}
				}
				else{
					h=tmp;
				}
				tmp=0;
			}
			else if(enter[i]=='m'){
				if(i+1<enter.length()){
					if(enter[i+1]=='s'){
						ms=tmp;
						i+=1;
					}
					else if(enter[i+1]=='i'){
						m=tmp;
						i+=2;
					}
					else{
						m=tmp;
					}
				}
				else{
						m=tmp;
					}
				tmp=0;
			}
			else if(enter[i]=='s'){
				if(dotyes){
					dot=tmp;
				}
				else{
					s=tmp;
				}
				tmp=0;
			}
		}
		m+=h*60;
		s+=m*60;
		dot+=s*10;
		ms+=dot*100;
		cout<<ms<<'\n';
	}
	return 0;
}

後記 Afterword
#

很久沒出解題報告書了 還有另一個 YoJudge 預練(空間之章) 晚點再寫吧!寫完「空間之章」,就可以來寫真正的「YouJudge」(X)了

相關文章