zoukankan      html  css  js  c++  java
  • 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);
    
    	}
    

      

  • 相关阅读:
    angular的uiRouter服务学习(2)
    angular的uiRouter服务学习(1)
    angular学习笔记(三十一)-$location(2)
    angular指令中使用ngModelController
    angular中的表单数据自定义验证
    angular-ngSanitize模块-linky过滤器详解
    angular-1.3 之ng-model-options指令
    angular控制器的执行顺序和服务的注入情况
    angular五种服务详解
    .NET CORE EF 框架调用存储过程
  • 原文地址:https://www.cnblogs.com/yfish/p/9604138.html
Copyright © 2011-2022 走看看