You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)。这是因为你把时间当成普通整数相加,而没有处理分钟到小时的进位逻辑。

修正方案

我们需要遵循“整数时间 → 总分钟数 → 计算 → 总分钟数 → 整数时间”的流程:

  1. 将输入的HHMM整数转为总分钟数(你这部分是对的):

    int hs = total_min_start / 100; // 提取小时
    int ms = total_min_start % 100; // 提取分钟
    int departure_total_min = hs * 60 + ms; // 出发时间总分钟数
    
  2. 计算到达时间的总分钟数:

    int arrival_total_min = departure_total_min + journey_time;
    
  3. 将总分钟数转回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:10:38