题目是这样的:

题目内容:

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

  

c语言实战 BJT时间转化位UTC时间的更多相关文章

  1. UTC 时间转化为北京时间

    // UTC 时间转化为北京时间 function utc2beijing(utcTime) { var T_pos = utcTime.indexOf('T'); var Z_pos = utcTi ...

  2. 将本地时间转换成 UTC 时间,0时区时间

    // 将时间戳转换成日期格式: function timestampToTime(timestamp) { var date = new Date(timestamp);//时间戳为10位需*1000 ...

  3. 时间处理得到UTC时间

    在工作过程遇到了时间处理的问题,因为需要统一将时间处理按照utc时间进行处理,因此,不能简单的通过系统运行直接得到时间的毫秒数,这样会在不同时区得到的值是不同的. import java.text.P ...

  4. C#本地时间和GMT(UTC)时间的转换

    /// <summary> /// 本地时间转成GMT时间 /// </summary> 4 public static string ToGMTString(DateTime ...

  5. python 获取utc时间转化为本地时间

    import datetime timenow = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)) timetext = time ...

  6. utc时间、本地时间及时间戳转化

    1.时间戳的概念 时间戳的定义请看百科unix时间戳,需要注意的时间戳为当前时刻减去UTC时间(1970.1.1)零点时刻的秒数差,与当前系统所处的时区无关,同一时刻不管在任何时区下得到的时间戳都是一 ...

  7. 程序设计入门——C语言 第2周编程练习 1时间换算(5分)

    1 时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...

  8. 网易云课堂_程序设计入门-C语言_第二周:判断_1时间换算

    1 时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...

  9. 中国MOOC_零基础学Java语言_第2周 判断_1时间换算

    第2周编程题 查看帮助 返回   第2周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截 ...

随机推荐

  1. 51nod 1011 最大公约数GCD

    输入2个正整数A,B,求A与B的最大公约数. 收起   输入 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) 输出 输出A与B的最大公约数. 输入样例 30 105 输出 ...

  2. Python学习系列(二)(基础知识)

    Python基础语法 Python学习系列(一)(基础入门) 对于任何一门语言的学习,学语法是最枯燥无味的,但又不得不学,基础概念较繁琐,本文将不多涉及概念解释,用例子进行相关解析,适当与C语言对比, ...

  3. spark-shell与scala生成parquet文件

    spark-shell用户 spark-shell只能spark用户来进行初始化,如果用hdfs或者root将会卡在spark-shell的初始化那个地方.可以用这两个用户来验证spark安装时成功地 ...

  4. Android中内容观察者的使用---- ContentObserver类详解 (转)

    前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了 ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对Conten ...

  5. android栈和队列

    android栈和队列 栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表.LinkedList数据结构是一种双向的链式结构,每一 ...

  6. css控制div字数出现点点点

    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;

  7. Linux:Linux 常用命令讲解(软件、硬件、文件)

    一.Linux 常用命令 所有的命令操作都是在服务器上进行的 自学参考:菜鸟 Linux man + 命令:查看命令的文档: 命令  +  --usage:查看命令的文档: 命令  +  --help ...

  8. PL/SQL 训练06--字符串处理

    现在需要做一个任务调度,请大家设计,满足以下需求(1)任务可配置,比如可以配置PKG方法TEST_PROCEDURE(:1,:2...),可以是任意多个入参的方法,也可以没有入参(2)每个方法的实际参 ...

  9. 单片机keil C中的data、bdata、idata、xdata、hdata、pdata、code解释

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  10. 0003-程序流程1之app.js

    index.html中引入各种依赖的文件 由ng-app处开始angular Js的管理 angular.module('App', ['']) .run(function($rootScope,.. ...