题目描述
摘要:本题要求编写程序,根据四位数字格式的起始时间(小时无前导零)和可能为负的流逝分钟数,计算同日内的终止时间。核心思路是先解析起始时间的小时与分钟,统一转换为总分钟后再加流逝时间,最后按要求格式化输出小时(无前导零)和两位数字的分钟。文中给出了清晰的算法分析和带有详细注释的 C 语言实现。
有时候人们用四位数字表示一个时间,,比如1106表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为530;0 点 30 分表示为030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为530;0 点 30 分表示为030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110输出样例:
1310代码部分实现
算法的核心思路是先将起始时间(四位数字)解析为小时和分钟,然后统一转换为总分钟数,加上流逝时间,再转换回小时和分钟,最后按要求格式化输出。由于起始时间的表示中小时没有前导零,需要判断数值是否大于等于100来区分是否有小时部分;流逝时间可能为负数,直接与总分钟数相加即可,模运算会自动处理跨天和下溢,但题目保证结果在同一天内。格式化输出时,小时直接输出十进制整数,分钟用%02d保证两位数字,从而满足题目要求的输出格式。
#include<stdio.h>intmain(){intstart,elapsed;scanf("%d %d",&start,&elapsed);// 读取起始时间和流逝分钟数inthour,minute;// 将起始时间解析为小时和分钟if(start>=100){hour=start/100;// 前两位(或更多)为小时minute=start%100;// 后两位为分钟}else{// 起始时间小于100,说明小时为0hour=0;minute=start;// 整个数字即为分钟}// 将当前时间转换为总分钟数,并加上流逝分钟数(可能为负数)inttotal_minutes=hour*60+minute+elapsed;// 从总分钟数中反向计算小时和分钟hour=total_minutes/60;minute=total_minutes%60;// 格式化输出:小时无前导零,分钟始终显示两位数字printf("%d%02d",hour,minute);return0;}