題目是這樣的:
題目內容:
UTC是世界協調時,BJT是北京時間,UTC時間相當於BJT減去8。現在,你的程序要讀入一個整數,表示BJT的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果分小於10分,需要保留十位上的0。如1124表示11點24分,而905表示9點5分,36表示0點36分,7表示0點7分。
有效的輸入范圍是0到2359,即你的程序不可能從測試服務器讀到0到2359以外的輸入數據。
你的程序要輸出這個時間對應的UTC時間,輸出的格式和輸入的相同,即輸出一個整數,表示UTC的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果分小於10分,需要保留十位上的0。
提醒:要小心跨日的換算。
輸入格式:
一個整數,表示BJT的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果分小於10分,需要保留十位上的0。
輸出格式:
一個整數,表示UTC的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果分小於10分,需要保留十位上的0。
輸入樣例:
903
輸出樣例:
103
我是怎么考慮這個問題的。首先我們知道了一個非常重要的已知條件,utc time=bjt time -8,意思是只要知道了bjt的時間,把bjt的小時減去8就得到utc的小時了,所以我們只要分離出utc的小時數和分鍾數就可以了。
這是大概的思路。接着拿一個具體的時間舉例來驗證剛才的思路。
比如bjt時間是2038,意思是20點38分,那么怎么分離出小時數和分鍾數呢?
2038對100取余就得到了分鍾數了,2038-分鍾數的結果再除以100就得到了小時數了。
這樣行不行呢?經過調試,發現大部分時間是可以的,但是如果遇到538(意思是凌晨5點38分),就不行了
因為-8的話就出現負數了,這是不對的,這其實就遇到了時間隔天的問題,那么這里肯定要對小時和8比較一下
如果是大等於8,說明再當天時間,直接減8就行了,如果小於8,說明utc時間是前一天的時間,這時候就要用
BJT的小時數+24再減去8才得到正確的UTC小時。
這樣直接輸出小時數和分鍾數就可以了。但是經過測試發現,如果輸入的數據是8(0點8分),則輸出的是168,按照上面的格式說明這個意思是1點68分,這是不對的,但其實我們明白168的意思是16點8分,正確的輸出格式應該是1608才對,那怎么辦?
很簡單把小時數*100之后再加上分鍾數就可以了,16*100+8=1608,ok這下沒什么問題了。
/*
UTC是世界協調時,BJT是北京時間,UTC時間相當於BJT減去8。
現在,你的程序要讀入一個整數,表示BJT的時和分。
整數的個位和十位表示分,百位和千位表示小時。
如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果分小於10分,需要保留十位上的0。
如1124表示11點24分,而905表示9點5分,36表示0點36分,7表示0點7分。
有效的輸入范圍是0到2359,即你的程序不可能從測試服務器讀到0到2359以外的輸入數據。
你的程序要輸出這個時間對應的UTC時間,輸出的格式和輸入的相同,即輸出一個整數,表示UTC的時和分。
整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果分小於10分,需要保留十位上的0。
*/
//需要一個變量保存用戶輸入的BJT時間
int BJT = 0;
//兩個變量分別保存BJT時間的小時和分鍾
int BJTh = 0;
int BJTm = 0;
//對輸入的BJT時間限制(0~2359)
scanf_s("%d",&BJT);
if (BJT < 0)
{
printf("unexpected input,program will quit at once");
return 0;
}
if (BJT > 2359)
{
printf("unexpected input,program will quit at once");
return 0;
}
//分離出BJT時間的小時和分鍾
BJTm = BJT%100;
BJTh = (BJT - BJTm) / 100;
/*
分離出來的小時數如果大於等於8,直接減去8 就是UTC時間
分離出來的小時數如果小於8則 把小時數加24, 再減去8就是UTC時間。24小時計時
*/
if (BJTh < 8)
{
//乘100之后就是最后UTC時間的千分位和百分位的和了。
printf("UTC time is:%d", ((BJTh + 24 - 8)*100)+BJTm);
return 1;
}
printf("UTC time is:%d",((BJTh-8)*100)+BJTm);
return 1;
2018.9.15更新
int main()
{
//保存用戶輸入的BJT時間
int BJT = 0;
//保存BJT里面的時間和分鍾
int BJT_h = 0;
int BJT_m = 0;
//保存UTC時間
int UTC = 0;
scanf_s("%d", &BJT);
//校驗數據合法性
if(BJT<0||BJT>2359)
{
printf("wrong input ,the program will quit at once");
return 0;
}
//從BJT時間分離出時間和分鍾
BJT_h = BJT / 100;
BJT_m = BJT % 100;
if (BJT_h <= 8)
{
UTC = (BJT_h - 8 + 24) * 100 + BJT_m;
printf("%d",UTC);
}
else
{
UTC = (BJT_h - 8) * 100 + BJT_m;
printf("%d", UTC);
}
