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.

War es hilfreich?

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

ersetzen
long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top