Test Message

b981: YoJudge 預練(時間之章)

內容

前幾天看到一隻 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<=z<60
z.as :代表 z 秒又 a*100 毫秒, 0<=z<60, 0<=a<10
bms :代表 b 毫秒, 0<=b<1000


輸入

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

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

輸出

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

46800000
33600000
83877000
360000
2090000
8000
19700
567


解題思路

麻煩的字串處理,遇到關鍵字時將前面得到的數字按規則轉成毫秒。


完整程式碼

AC (2ms, 104KB)
#include <stdio.h>

int main()
{
int tmp, time;
char str[1000];
while (scanf(" %s", str) == 1)
{
time = tmp = 0;
for (int i = 0; str[i] != 0; i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
tmp = tmp * 10 + (str[i] - '0');
}
else
{
switch (str[i])
{
case 'h':
time += tmp * 3600000;
if (str[i + 1] == 'o')
i += 4;
break;
case 'm':
if (str[i + 1] == 's')
time += tmp, i += 2;
else
time += tmp * 60000;
break;
case 's':
time += tmp * 1000;
break;
case '.':
time += tmp * 1000 + (str[i + 1] - '0') * 100, i += 2;
break;
default:
break;
}
tmp = 0;
}
}
printf("%d\n", time);
}
return 0;
}