Konvertieren Sekunden bis Tage, Minuten und Sekunden
Frage
Hey everyone. Ich habe weiterhin C ++ lernen, und ich habe die ‚Herausforderung‘ die Umwandlung von Sekunden festgelegt worden, wie die Tage, Minuten und Sekunden zu formatieren.
Zum Beispiel:. 31600000 = 365 Tage, 46 Minuten, 40 Sekunden
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;
Es funktioniert und kommt mit der richtigen Antwort, aber es nach Abschluss Ich sah, wie andere Leute hatte es in Angriff genommen und ich war es anders. Ich frage mich, wenn ich etwas fehle.
Danke, Dan.
Lösung
Eines der Dinge, über die Programmierung ist, dass es nie nur eine Möglichkeit, etwas zu tun ist. In der Tat, wenn ich es meinen Kopf zu setzen, könnte ich in der Lage sein, mit einem Dutzend ganz unterschiedliche Weise zu kommen, dies zu erreichen. Sie sind nicht alles, wenn Ihr Code erfüllt die Anforderungen fehlen.
Für Ihre Unterhaltung, hier ist eine Art und Weise Stunden-Format bis: Minuten: Sekunden unter Windows (elapsed
ist ein Doppel-und repräsentiert Anzahl von Sekunden verstrichen ist, seit ... etwas)
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));
Andere Tipps
das scheint mir der einfachste Weg, um Sekunden in DD / hh / mm / ss konvertieren:
#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;
Ich hoffe, es hilft!
Grüße,
Stoycho
Ich denke, die Herausforderung von Stephen Prata Buch ist. Ich habe es wie folgt:
#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;
}
Zum Beispiel:. 31600000 = 365 Tage, 46 Minuten, 40 Sekunden
Wirklich?
$ bc
365*24*60*60 + 46*60 + 40
31538800
365*24*60*60 + 1066*60 + 40
31600000
Meinen Sie „convert die Eingabe in Tagen, Stunden, Minuten und Sekunden, und dann die Stunden verwerfen“ oder „wandeln die Eingabe in Tage, insgesamt Minuten innerhalb eines Tages (dh mehr als 60 sein), und Sekunden“ ?
Im zweiten Fall denke ich, sollten Sie den Befehl für Minuten mit
ersetzenlong minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);