7-2 然后是几点

7-2 然后是几点 (15 分)

题目

有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。

输入格式

输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。

输入样例

1120 110

输出格式

输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输出样例

1310

代码

#include <stdio.h>
int main()
{
  int now;//现在输入的时:分;
  int num;//第二个输入变量:偏移分钟数
  int min;//输入的分钟以及
  int dis_min,dis_hour;//最终显示的分钟和时钟
  int left_min;//用到的中间变量
  scanf("%d %d",&now,&num);
  if (num>=0)//情形一:偏移分钟数为正值
{
 min = now%100 + num; 
 dis_min = min%60; //显示的分钟数转换为60进制
 left_min = min-dis_min;//剩下的分钟数要进位到时钟
 dis_hour = now/100 + left/60;
}
  else 
{
/*这里借鉴了补码的思想:减去x分钟,就等于在原来的分钟显示+(60-x),同时时钟减去相应的数值即可。*/
  int temp = -num;
  temp = temp/60;
  min = now%100 +(temp+1)*60 + num;
  dis_min=min%60;
  dis_hour=now/100 - (temp+1);
}
  if (dis_min==0) 
  printf("%d00",hour);
  else 
  printf("%d%d",dis_hour,dis_min);
  return 0;
}

总结

这道题耗费了不少时间,因为总是会漏掉一些没想到的情形而拿不了AC。
注意偏移的分钟量如果是负数,就要减去对应的时钟数,temp=temp/60 + 1,才是对应要倒退的时钟数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容