7-14 然后是几点(含重难点注释)

有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。

输入格式:
输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。

输出格式:
输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310

//方法一,复杂方法 
#include<stdio.h>

int main(){
	//a表示起始时间,b表示增加的分钟数 
	int a,b;
	scanf("%d %d",&a,&b);
	int hour=a/100;
	int min=a%100;
	//b>=0的情况 
	if(b>=0){
		//inHour表示时间增加引起的小时进位,inMin单纯表示时间增加后分钟数是多少 
		int inHour=(min+b)/60;
		int Min=(min+b)%60;
		//%02d表示这个数字一定是两位,比如输出02而不是2 
		printf("%d%02d",hour+inHour,Min);
	}
	//b<0的情况
	else{
		//这个算式就相当于在借位,将hour减到足够用来减少b分钟而不产生退位的那个小时时刻 
		hour=hour-(-b)/60-1;
		//放下小时的变化,只观察分钟数的变化,用这个60-(-b)%60分钟数的变化+原本的分钟数再取余就得到分钟数 
		int Min=(60-(-b)%60+min)%60;
		//inHour就是算出的小时数的变化,这个inHour之所以为正,是因为我们之前已经做过借位了 
		int inHour=(60-(-b)%60+min)/60;
		//b<0的情况相较于前者,计算过程其实类似,只是多了一步借位
		//先把hour减到一个“安全”的位置,然后就可以用前面的方法做b<0的情况  
		printf("%d%02d",hour+inHour,Min);
		}
    return 0;
}

//方法二,简单方法 
#include<stdio.h>

int main()
{
	//a起始时间,b增加的分钟数,time表示增加/减少后的时间,hour是增加后的小时数,min是增加后的分钟数 
	int a,b,time,hour,min;
	scanf("%d %d",&a,&b);
	//把小时+分钟的形式转换为分钟数,然后进行运算,一是方便简单,二是便于理解 
	time=(a/100*60+a%100)+b;
	hour=time/60;
	min=time%60;
	printf("%d",hour*100+min);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/nnnnnick/article/details/89813358
今日推荐