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,才是对应要倒退的时钟数。