9

嘿大家。我一直在继续学习 C++,并且我已经被设置为将秒转换为天、分和秒的格式的“挑战”。

例如:31600000 = 365 天 46 分钟 40 秒。

using namespace std;
const int hours_in_day = 24;
const int mins_in_hour = 60;
const int secs_to_min = 60;

long input_seconds;
cin >> input_seconds;

long seconds = input_seconds % secs_to_min;
long minutes = input_seconds / secs_to_min % mins_in_hour;
long days = input_seconds / secs_to_min / mins_in_hour / hours_in_day;

cout << input_seconds << " seconds = "
     << days << " days, "
     << minutes << " minutes, "
     << seconds << " seconds ";

return 0;

它有效并提出了正确的答案,但在完成它后,我看看其他人是如何解决它的,他们的不同。我想知道我是否遗漏了什么。

谢谢,丹。

4

4 回答 4

10

在我看来,这似乎是将秒数转换为 DD/hh/mm/ss 的最简单方法:

#include <time.h>
#include <iostream>
using namespace std;    

time_t seconds(1641); // you have to convert your input_seconds into time_t
tm *p = gmtime(&seconds); // convert to broken down time

cout << "days = " << p->tm_yday << endl;
cout << "hours = " << p->tm_hour << endl;
cout << "minutes = " << p->tm_min  << endl;
cout << "seconds = " << p->tm_sec << endl;

我希望它有帮助!

问候,

斯托伊乔

于 2013-07-11T10:02:22.393 回答
6

关于编程的一件事是,做某事永远不会只有一种方法。事实上,如果我下定决心,我可能会想出十几种完全不同的方法来实现这一点。如果您的代码符合要求,您就不会错过任何东西。

为了您的娱乐,这里有一种在 Windows 下格式化小时:分钟:秒的方法(elapsed是一个双倍 & 表示从...开始经过的秒数)

sprintf_s<bufSize>(buf, "%01.0f:%02.0f:%02.2f", floor(elapsed/3600.0), floor(fmod(elapsed,3600.0)/60.0), fmod(elapsed,60.0));
于 2010-03-10T18:45:49.917 回答
5

我认为这是来自斯蒂芬普拉塔的书的挑战。我这样做如下:

#include <iostream>

using namespace std;

int main()
{
    long input_seconds = 31600000;

    const int cseconds_in_day = 86400;
    const int cseconds_in_hour = 3600;
    const int cseconds_in_minute = 60;
    const int cseconds = 1;

    long long days = input_seconds / cseconds_in_day;
    long hours = (input_seconds % cseconds_in_day) / cseconds_in_hour;
    long minutes = ((input_seconds % cseconds_in_day) % cseconds_in_hour) / cseconds_in_minute;
    long seconds = (((input_seconds % cseconds_in_day) % cseconds_in_hour) % cseconds_in_minute) / cseconds;
    cout << input_seconds << " seconds is " << days << " days, " << hours << " hours, " << minutes << " minutes, and " << seconds << " seconds.";

    cin.get();
    return 0;
}
于 2014-11-06T20:21:57.373 回答
1

例如:31600000 = 365 天 46 分钟 40 秒。

真的吗?

$ bc
365*24*60*60 + 46*60 + 40
31538800

365*24*60*60 + 1066*60 + 40
31600000

您的意思是“将输入转换为天、小时、分钟和秒,然后丢弃小时”还是“将输入转换为天、一天内的总分钟数(即可以超过 60 分钟)和秒”?

在第二种情况下,我认为您应该将指令替换为几分钟

long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
于 2010-03-10T19:18:13.980 回答