有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
思路:例1310/100=13得到小时数,1310%100=10得到分钟数,都先转化为总分钟数,不用考虑流逝的分钟是否大于60,是否为负数。
同时有三种情况:满4位,分钟数超过60,有进位; 读不满4位,进位分钟正好是0;分钟小于0,输出不满4位且小时是0
#include <stdio.h>
int main()
{
int time,via,h,m;
scanf("%d %d",&time,&via);
time=time/100*60+time%100+past;
h=time/60;
m=time%60;
printf("%d%02d",h,m); //02的意思是如果输出的整型数不足两位,左侧用0补齐
return 0;
}
错误代码:分钟小于0输出不满四位且小时是0不满足
#include<stdio.h>
int main()
{
int begin,via,next; //起始、流逝与终止时间
int h,m,sum=0;
scanf("%d %d",&begin,&via);
h=begin/100;
m=begin%100;
sum=h*60+m+via;
h=sum/60,m=sum%60;
next=h*100+m;
printf("%d",next);
return 0;
}
正确代码如下:
#include <stdio.h>
int main()
{
int nowtime,passtime;
scanf("%d %d",&nowtime,&passtime);
int h,m,sum_minute=0;
h=nowtime/100;
m=nowtime%100;
sum_minute = h*60+m+passtime;
h=sum_minute/60;
m= sum_minute%60;
int nexttime = h*100+m;
if(nexttime<60)
printf("%03d",nexttime);
else
printf("%d",nexttime);
return 0;
}
补充:%d:为普通的输出;
%2d:按宽度为2输出,右对齐方式输出。若不够两位,左边补空格;
int main()
{
int a = 1;
printf("%2d",a);//输出结果为:_1 _代表空格
return 0;
}
%02d:同样宽度为2,右对齐方式输出。位数不够,左边补0;
int main()
{
int a = 1;
printf("%02d",a);//输出结果为:01
return 0;
}
%.2d:从执行效果方面,与%02d一样。