将秒转换为小时、分钟和秒

新手上路,请多包涵
#include <cstdio>
#include <iostream>
using namespace std;
int main ()
{
    int seconds, hours, minutes;
    cin >> seconds;
    hours = seconds/3600;
    cout << seconds << " seconds is equivalent to " << int(hours) << " hours " << seconds%(hours*60)
         << " minutes " << (seconds%(hours*3600))-((seconds%(hours*60))*60) << " seconds.";
}

由于某种原因,该程序仅适用于 3600 以上的数字。有谁知道如何解决这个问题?每当我执行低于 3600 的数字时,屏幕都会显示来自 Windows 的消息,说明程序已停止工作。

原文由 user4013823 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

试试这个,测试和工作:

 int seconds, hours, minutes;
cin >> seconds;
minutes = seconds / 60;
hours = minutes / 60;
cout << seconds << " seconds is equivalent to " << int(hours) << " hours " << int(minutes%60)
     << " minutes " << int(seconds%60) << " seconds.";

因为分钟是秒/60,所以再除以 60 相当于将秒数除以 3600,这就是它起作用的原因。

原文由 Shadow 发布,翻译遵循 CC BY-SA 3.0 许可协议

到目前为止,所提出的解决方案都没有计算持续时间。我不得不写一个时钟在 arduino 中使用,millis() 函数返回自开启以来的毫秒数,以得到秒数除以 1000。

 void showTime(unsigned long  seconds){

   printf( "seconds : %lu ", seconds);
   int hh = (seconds/3600) %24;
   int mm = (seconds/60) %60;
   int ss = seconds%60;
   printf( " Time : %2d:%02d:%02d\n", hh, mm,ss);

   }

   showTime( 0*24*3600 +  4*3600+35*60+25); // 0d+4hs+35m+25s;
   showTime( 2*24*3600 +  1*3600+45*60+59); // 2d+1hs+45m+59s;
   showTime(40*24*3600 + 10*3600+ 5*60+10); // 40d+10hs+5m+10s;

打印:

 seconds : 189325  Time :  4:35:25
seconds : 6359  Time :  1:45:59
seconds : 3492360  Time : 10:06:00

原文由 user2232395 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题