【问题标题】:convert integer into 24 hours format C++将整数转换为 24 小时格式 C++
【发布时间】:2018-11-03 18:18:25
【问题描述】:

我正在寻求 C++ 将整数输入转换为 24 小时格式的帮助。 假设您为从 A(开始)到 B(结束)的飞机建立了预定时间;用户可以输入 4 个不同的变量,例如飞机从 A 到 B 的行程时间;首飞时间;最后一班飞机时间;以及一天的出行频率。

输入如下:

int journey_time; 
int start_time; 
int end_time; 
int frequency;

cout << "Please enter your journey time:\n"; 
cin >> journey_time; 

cout << "Please enter your start time:\n"; 
cin >> start_time; 

cout << "Please enter your end time: \n"; 
cin >> end_time; 

cout << "Please enter the frequency: \n";
cin >> frequency;

值得一提的是,用户应将时间输入为整数,并且小时应转换为 24 小时制时间 这就是我被困的地方;我能够将整数转换为分钟,但不能转换为小时

到目前为止我有这个代码

 for (int total_min_start= start_time; total_min_start <= end_time; total_min_start +=frequency)
    {
        hs = total_min_start/100; // to get the hours 
        ms = total_min_start %100;  // to get the minutes


        x = (hs *60) + ms; // converted into minutes

        h = ((x-ms)/60) * 100; <= this is where I am confused, I want here the reconversion of hours into to 24 hours format 


        t = h + ms;  // this is the total time after reconversion

        cout << t << "\t" << t + journey_time<< endl; 

}}} 

如果我输入旅程时间=15;开始时间=0930; end_time= 1000 和频率 = 15 分钟,我得到以下输出(左)但我想要这个输出(右)

WRONG OUTPUT            RIGHT OUTPUT
930     945             930     945
945     960             945     1000
960     1000            1000    1015

我会非常感谢任何帮助或提示... 提前致谢

【问题讨论】:

  • 我建议你先在纸上试一试。并且您尝试了许多不同的可能解决方案、算法和方程式。直到找到适用于所有测试用例的测试用例(应包括 0000 并以不同方式传递它)。
  • 感谢您的提示,我已经这样做了 3 天,但没有得到正确的结果,不知道我错过了什么......

标签: c++ for-loop time integer format


【解决方案1】:

好的,让我们展开循环并分别执行每个步骤。

第一次迭代:

// Loop initialization
total_min_start = 930;

hs = 930 / 100;  // 9
ms = 930 % 100;  // 30

x = (9 * 60) + 30;  // 540 + 30 = 570

h = ((570 - 30) / 60) * 100;  // (540 / 60) * 100 = 9 * 100 = 900

t = 900 + 30;  // 930

// t + journey_time = 930 + 15 = 945

total_min_start += 15;  // 945

到目前为止一切顺利,所以我们开始第二次迭代:

total_min_start = 945;

hs = 945 / 100;  // 9
ms = 945 % 100;  // 45

x = (9 * 60) + 45;  // 540 + 45 = 585

h = ((585 - 45) / 60) * 100;  // (540 / 60) * 100 = 9 * 100 = 900

t = 900 + 45;  // 945

// t + journey_time = 945 + 15 = 960

total_min_start += 15;  // 960

啊,看来我们有问题了。 t 中的值不是以分钟为单位的时间,它实际上是两个独立的值:小时和分钟。

有两种方法可以解决这个问题:用户输入输入后,将其分成两个值,并在两个单独的变量中跟踪时间。

解决它的第二种方法,我认为更容易,是在输入后立即将输入转换为单个值,其单位是午夜后的分钟数。也就是说,如果用户输入 930 表示上午 9:30,则将其转换为值 570(即午夜后的分钟数)。然后仅使用该值,根据需要增加和减少,并且仅在将其呈现给用户时将其转换回您的首选格式。

为了帮助您来回转换,我建议您使用几个实用程序或辅助函数:一个用于将时间戳转换为午夜过后的分钟数,另一个用于将午夜过后的分钟数转换为时间戳。然后你可以轻松地做一些类似的事情

cout << minutes_to_time(t) << '\t' << minutes_to_time(t + journey_time) << '\n';

哦,别忘了在午夜测试绕行。两者都以t 正好是午夜结束,t + journey_time 是午夜,t 是在午夜之前一点点,t + journey_time 在午夜之后一点点。

【讨论】:

    【解决方案2】:

    创建单独的函数以将分钟转换为 24 小时时间格式,反之亦然。

    auto get_24hr = [](int minutes){ return (minutes/60)*100 + (minutes%60);};
    auto get_minutes = [](int time_24){return (time_24/100)*60+  (time_24 % 100);};
    
    for (int total_min_start= start_time; total_min_start <= end_time; total_min_start +=frequency)
    {
        auto x = get_minutes(total_min_start); // converted into minutes
        cout << get_24hr(x) << "\t" << get_24hr(x+journey_time) << endl;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-24
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      相关资源
      最近更新 更多