有时候人们用四位数字表示一个时间,比如 1106
表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530
;0 点 30 分表示为 030
。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530
;0 点 30 分表示为 030
。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
思路1:(也是我最开始考虑到的方法)
首先通过对100做除法和对100取余将给出的数字转化为小时与分钟,分别进行之后的运算。
注意点:经过的时间可能超过60也可能为负。
思路2:(见代码版本2)
直接将当前时间与经过时间全部转化为分钟,之后一起进行运算。
注意点:此方法仅需判断经过时间是否为负。
注:经评论区提醒,思路2的代码有测试机检测不出的bug,能通过样例检测AC,但确实有漏洞,思路1的代码是完美的,但大家不要参考我的代码,我的初始版本太乱了,建议搜下其他人简洁一点的版本。
代码如下:
版本2:
#include<stdio.h>
int main()
{
int start,end,past;
int m,h;
scanf("%d %d",&start,&past);
h=start/100;
m=start%100;
if(past>0)//经过时间为正
{
m=h*60+m+past;//直接将所有时间转化为分钟
end=(m/60)*100+m%60;
printf("%d",end);
}
else//经过时间为负时,需考虑输出不满4位且小时是0的情况
{
m=h*60+m+past;
h=m/60;//小时单独进行计算
m=m-h*60;
printf("%d%d",h,m);//直接进行输出,防止出现小时不能正常显示
}
return 0;
}
版本1:该版本非常繁琐,有很多重复代码段,看了别人写的代码之后感觉自己的代码像老太太的裹脚布一样又臭又长……请勿参考与尝试阅读,留此代码警示自己要学会精简自己的代码和思路。
#include<stdio.h>
int main()
{
int start,end,past;
int m,h,x,y;
scanf("%d %d",&start,&past);
h=start/100;
m=start%100;
if(past<0)
{
if(past*(-1)>60)
{
x=past/60;
y=past%60;
x=h+x;
y=m+y;
if(y<0)
{
x=x-1;
y=60+y;
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
else
{
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
}
else if(past*(-1)<60)
{
x=h;
y=m+past;
if(y<0)
{
x=x-1;
y=60+y;
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
else
{
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
}
}
else if(past>0)
{
if(past>60)
{
x=past/60;
y=past%60;
x=h+x;
y=m+y;
if(y>=60)
{
x=x+1;
y=y-60;
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
else
{
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
}
else if(past<60)
{
x=h;
y=m+past;
if(y>=60)
{
x=x+1;
y=y-60;
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
else
{
end=x*100+y;
if(x==0&&y<10)
{
printf("00%d\n",end);
}
else if(x==0&&y>=10)
{
printf("0%d\n",end);
}
else
printf("%d\n",end);
}
}
}
return 0;
}