題目 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)了