解题思路
题目要求将12小时制时间转换为24小时制时间。需要注意以下规则:
- 12:00:00AM (午夜) -> 00:00:00
- 12:00:00PM (中午) -> 12:00:00
- 1:00:00PM - 11:59:59PM -> 13:00:00 - 23:59:59
- 1:00:00AM - 11:59:59AM -> 01:00:00 - 11:59:59
解题思路:
- 解析输入的时、分、秒和AM/PM标记
- 根据AM/PM进行相应转换:
- PM且不是12点,加12小时
- AM且是12点,改为0点
- 使用格式化输出确保两位数显示
代码
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int hour, minute, second;
char meridiem[3];
scanf("%d:%d:%d%s", &hour, &minute, &second, meridiem);
// 处理PM情况
if (strcmp(meridiem, "PM") == 0) {
if (hour != 12) hour += 12;
}
// 处理AM情况
else {
if (hour == 12) hour = 0;
}
// 格式化输出
printf("%02d:%02d:%02d\n", hour, minute, second);
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String time = sc.nextLine();
// 解析时间
int hour = Integer.parseInt(time.substring(0, 2));
int minute = Integer.parseInt(time.substring(3, 5));
int second = Integer.parseInt(time.substring(6, 8));
String meridiem = time.substring(8);
// 转换时间
if (meridiem.equals("PM")) {
if (hour != 12) hour += 12;
} else {
if (hour == 12) hour = 0;
}
// 格式化输出
System.out.printf("%02d:%02d:%02d\n", hour, minute, second);
}
}
time = input()
# 解析时间
hour = int(time[0:2])
minute = int(time[3:5])
second = int(time[6:8])
meridiem = time[8:]
# 转换时间
if meridiem == "PM":
if hour != 12:
hour += 12
else: # AM
if hour == 12:
hour = 0
# 格式化输出
print(f"{hour:02d}:{minute:02d}:{second:02d}")
算法及复杂度
- 算法:字符串处理 + 条件判断
- 时间复杂度:
- 只需处理固定长度的时间字符串
- 空间复杂度:
- 只使用了常数个变量