题目
题目描述 有一时钟,在某时刻的时间为HH:MM:SS(24小时制),求时钟在N秒(N<86400)之前的时间hh:mm:ss。 输入说明 第一行:输入时间HH:MM:SS 第二行:一个整数秒数N(N<86400) 输出说明 当前时刻N秒之前的时间,以hh:mm:ss格式。 输入样例1: 06:17:22 80 输入样例2: 00:00:01 2 输出样例1: 06:16:02 输出样例2: 23:59:59
思路
- 输入时间的时候要输入冒号:,用一个char来接收。
- 时间转换利用除法和求余来完成。
- 注意下减的时候可能会减出来负数,需要判断并处理一下。然后小时数可能小于0或大于24。这里这样处理非常巧妙:hh = ((hh % 24) + 24)%24
- c++输出流的格式控制太麻烦,用c语言的printf()。
格式符%02d中2d前面的前导符0表示输出数据时,若左边有多余位,则补0。
题解
#include <iostream>
int main()
{
using namespace std;
int hh, mm, ss, second;
char sep;
cin>>hh>>sep>>mm>>sep>>ss>>second;
ss -= second;
mm += ss / 60;
ss %= 60;
if (ss < 0) {
mm--;
ss += 60;
}
hh += mm / 60;
mm %= 60;
if (mm < 0) {
hh--;
mm += 60;
}
hh = ((hh % 24) + 24)%24;
printf("%02d:%02d:%02d", hh, mm, ss);
return 0;
}
|