计算时间间隔

题目描述

读入两个用“时:分:秒”表示的时间点,计算以秒为单位的时间间隔。
输入

输入有两行,每行是一个用“时:分:秒”表示的时间点。测试数据保证第二个时间点晚于第一个时间点。
输出

输出一个整数,表示时间间隔的秒数。
样例输入

08:00:00
09:00:00
 

样例输出

3600

解题思路:直接两个时间的时分秒相减乘以相应的倍数即可
比如08:55:56和09:02:03
时:(9-8)*3600=3600
分:(2-56)*60=-3240
秒:3-56=-53
相加:3600-3240-53=307

总的来说,如果说小时级别相差两个小时,那必定可以凑出一个整的小时来,如果相差三个小时,那至少可以凑出两个整的小时,剩下一个小时可能是完整的(给的数据比如是08:00:00到11:00:00)也有可能不是完整的,现在假设是完整的3600秒,然后再将分钟和秒按照大小各自排列,他们的整数差就是这凑出来的一个小时中实际上并没有度过的,需要减去,结果就是时间差。
比如:08:26:38和10:11:45
10-8=2,小时级别为2,则就按两个小时算2*3600=7200秒
我们可以看到,虽然小时级别为2,但是我们只能凑出一个完整的小时来,08:26:38到09:26:38是完整的一个小时,但是从09:26:38到10:11:45是不够一个小时的,但是小时级别我们的差是2,现在假设是完整的两个小时,那么完整的第二个小时应该是从09:26:38到10:26:38,然后找到中间实际上没有度过的时间减掉即可
本来实验数据是到10:11:45,但是我们假设的是两个完整的小时,时间上10:11:45到10:26:38这一段时间是假的,所以要减去,
所以分钟级别是:(11-26)*60= -900
这样我们把分钟的假时间减掉以后,就剩下秒了。是10:26:45到10:26:38的秒差
然后是秒级别:38到45是有7秒的假时间
38-45=-7
所以时间差为:7200-900-7=6293

上代码:

#include<stdio.h>
#include<math.h>
int main(){

 int h[2],m[2],s[2];
 for(int i=0;i<2;i++)
	 scanf("%d:%d:%d",&h[i],&m[i],&s[i]);
 int a=(h[1]-h[0])*3600;
 //b的值可能是正的也可能是负的
 int b=(m[1]-m[0])*60;
  //c的值可能是正的也可能是负的
 int c=(s[1]-s[0]);

 printf("%d\n",a+b+c);

return 0;
}

思路上是用了先补齐,然后再减去的思想

其他人有用直接算出两个时间从00:00:00开始经过的秒数相减,这样的思路比较简单

#include <stdio.h>//简单题就不用数组了
#include<math.h>
int main()
{
    int h1,h2,m1,m2,s1,s2,sec1,sec2;
 
    scanf("%d:%d:%d",&h1,&m1,&s1);
    scanf("%d:%d:%d",&h2,&m2,&s2);
    sec1=h1*3600+m1*60+s1;
    sec2=h2*3600+m2*60+s2-sec1;
    printf("%d\n",sec2);
    return 0;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值