7-2 然后是几点 (15 分) 有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。
输入格式:
输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。
输出格式:
输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
int hour=a/100;
int min=a%100;
if(b>0){
int h=hour+(min+b)/60;
int m=(min+b)%60;
printf("%02d%02d\n",h,m);
}else{
int fb=-b;
int h=hour-fb/60-1;
int m=(60-fb%60+min)%60;
h=h+(60-fb%60+min)/60;
printf("%d%02d\n",h,m);
}
return 0;
}
各人总结:
在学习各种博客后,终于弄懂了这个时间转换的磨人小妖精
算法思想还是相对来说很简单的,但是在分钟的转换时特别要注意以下几点:
1.当分钟为正数时,在原来分钟的基础上加上后来的分钟,但这可能会导致小时数+1;
2.当分钟为负数的时候情况就较为复杂,
第一:要考虑到,小时数要减去分钟数模60,并且还要-1;
第二:分钟数倒着减的时候,可以采取60减去分钟模上60加上原来的分钟数,最后将分钟数模上60;
第三:因为存在小时数会多减的情况,所以最后需要加上上述分钟求值得式子最后除以60的余数,才是最终的结果
3.格式输出时也需要特别注意,因为小时和分钟是按照四位数的格式输出的,所以更要注意~
✿✿ヽ(°▽°)ノ✿
华丽丽的分割线,
PAT基础也不容易啊,各位爷加油ヾ(◍°∇°◍)ノ゙