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

时间:2014-09-06 05:06:02

标签: c++

#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的消息,说该程序已停止工作。

7 个答案:

答案 0 :(得分:14)

试试这个,测试并运作:

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,这就是它起作用的原因。

答案 1 :(得分:10)

seconds/3600是整数除法,因此对于seconds < 3600hours0seconds%(hours*3600)之类的内容会变为seconds % 0,导致除法逐为零。


让我们首先让逻辑正确。假设您要将5000 seconds写为x小时y分钟z秒,这样所有三个都是整数,yz都不是大于59.你做什么?

好吧,您可以先将其写为q分钟z秒,这样两者都是整数,z不大于59.这很容易:

q = 5000 / 60 = 83  // integer division
z = 5000 % 60 = 20

所以5000秒是83分20秒。现在,您如何将83 minutes写入x小时y分钟,这样两者都是整数,y不超过59?你做同样的事情:

x = 83 / 60 = 1
y = 83 % 60 = 23

好的,让我们概括一下:

int total, seconds, hours, minutes;
cin >> total;
minutes = total / 60;
seconds = total % 60;
hours = minutes / 60;
minutes = minutes % 60;
cout << total << " seconds is equivalent to " << hours << " hours " << minutes 
     << " minutes " << seconds << " seconds.\n" ;

答案 2 :(得分:2)

你在这里遇到了一个被零除的问题:

seconds % (hours*60);
凭借整数除法,

hours为0。

hours = seconds/3600;

根据您尝试做的事情,如果总秒数大于3600,您应该考虑条件逻辑来打印分钟。您还要在下一部分中研究类似的逻辑。你的印刷流。

我的C ++很生疏,如果这不是完全有效的语法,请原谅:

cout << (seconds > 3600 ? seconds % (hours*60) : seconds) << endl;

答案 3 :(得分:1)

使用功能;

#include<iostream>

    using namespace std;
    int hour(int h)
    {
        int second;
        //second=(h/3600);
        if (h>3600)
            second=h/3600;
        else 
           second=(h/3600);
        return (second);
    }

    int minute(int m)
    {
        int second2;
        second2=(   );
        return(second2);
    }

    int second(int s)
    {
        int second3;
        second3=((s-3600)%60);
        return (second3);
    }

    void main()
    {
        int convert;
        cout<<"please enter seconed to convert it to hour\b";

        cin>>convert;
        cout<<"hr : min : sec \n";
        cout<<hour(convert)<<":"<<minute(convert)<<":"<<second(convert)<<endl;
        system("pause");
    }

答案 4 :(得分:1)

尝试一下:

int totalSecond;
cin >> totalSecond;

int hour = totalSecond / 3600;
int minute = (totalSecond % 3600) / 60;
int second = totalSecond % 60;

cout << hour << ":" << minute << ":" << second << endl;

假设totalSeconds是自午夜以来的秒数,并且小于86400

答案 5 :(得分:0)

使用std::chrono::duration_cast,您可以简单地编写代码(更多选项请参考std::chrono::duration):

#include <chrono>
#include <iostream>

using namespace std::chrono;

int main() {
  int s; std::cin >> s;
  seconds sec(s);
  std::cout << duration_cast<hours>(sec).count() << ':'
            << duration_cast<minutes>(sec).count() % 60 << ':'
            << sec.count() % 60;
}

答案 6 :(得分:-1)

看看这段代码:

fathers