C++整数转24小时制时间问题求助:航班时刻表开发
解决C++中整数形式24小时制时间的转换与计算问题
我明白你卡在了从分钟数转回HHMM格式的时间,以及行程时间累加时的进位问题——这确实是处理这种“整数表示时间”格式容易踩的坑。核心问题是:不能直接对HHMM格式的整数进行加减运算,因为分钟部分超过59不会自动向小时进位(比如45+15=60,但在HHMM里应该是进位成1小时0分)。我们需要全程用总分钟数来计算,最后再转回HHMM格式。
问题分析
你当前的代码中,t + journey_time这一步是错误的:比如945 + 15得到960,但实际上9:45加15分钟应该是10:00(即1000)。这是因为你把时间当成普通整数相加,而没有处理分钟到小时的进位逻辑。
修正方案
我们需要遵循“整数时间 → 总分钟数 → 计算 → 总分钟数 → 整数时间”的流程:
将输入的HHMM整数转为总分钟数(你这部分是对的):
int hs = total_min_start / 100; // 提取小时 int ms = total_min_start % 100; // 提取分钟 int departure_total_min = hs * 60 + ms; // 出发时间总分钟数计算到达时间的总分钟数:
int arrival_total_min = departure_total_min + journey_time;将总分钟数转回HHMM格式的整数:
这里需要分别计算小时和分钟,再组合成整数:// 处理出发时间的格式转换 int departure_hour = departure_total_min / 60; int departure_min = departure_total_min % 60; int departure_time = departure_hour * 100 + departure_min; // 处理到达时间的格式转换 int arrival_hour = arrival_total_min / 60; int arrival_min = arrival_total_min % 60; int arrival_time = arrival_hour * 100 + arrival_min;
修正后的完整循环代码
把你的循环替换成下面的代码:
for (int current_time = start_time; current_time <= end_time; current_time += frequency) { // 1. 把当前出发时间(HHMM整数)转成总分钟数 int hs = current_time / 100; int ms = current_time % 100; int departure_total_min = hs * 60 + ms; // 2. 计算到达时间的总分钟数 int arrival_total_min = departure_total_min + journey_time; // 3. 转回HHMM格式 int dep_h = departure_total_min / 60; int dep_m = departure_total_min % 60; int dep_time = dep_h * 100 + dep_m; int arr_h = arrival_total_min / 60; int arr_m = arrival_total_min % 60; int arr_time = arr_h * 100 + arr_m; // 输出结果 cout << dep_time << "\t" << arr_time << endl; }
测试你的输入案例
当输入:
- journey_time=15
- start_time=0930
- end_time=1000
- frequency=15
修正后的代码会输出:
930 945 945 1000 1000 1015
完全符合你的期望输出。
额外提示
- 如果你的航班可能跨天(比如end_time是2350,frequency是20,那么下一班是0010),可以在计算总分钟数时对
1440(一天的总分钟数)取模,确保时间始终在24小时范围内:int arrival_total_min = (departure_total_min + journey_time) % 1440; - 可以添加输入合法性检查,比如确保用户输入的时间中分钟部分不超过59(比如
960这种输入是无效的),避免后续计算出错。
内容的提问来源于stack exchange,提问作者user9841022
相关产品推荐
相关产品推荐

