題目是這樣的:
題目內容:
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); }