c語言實戰 BJT時間轉化位UTC時間


題目是這樣的:

題目內容:

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);

	}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM