2016-04-08 14 views
1

Also sollen wir 453456 Sekunden in Jahre, Tage, Stunden, Minuten und Sekunden umwandeln.Ich habe Probleme, eine Formel zu finden

Allerdings kann ich nicht scheinen, über Jahre zu kommen.

Hier ist, was ich bisher:

#include<iostream> 

using namespace std; 



int main(){ 
     int secDis; 
     int years; 
     const int yearsSec = 31536000; 
     int days; 
     cout << "Please give me the time of travel in seconds."; 
     cin >> secDis; 
     years = secDis/yearsSec; 
     days = (yearsSec%secDis)/1440; /*idk if I am on the right track*/ 
     cout << "You have been traveling for: " 
      << years << days; 

Wenn es 453.456 Sekunden ist, sollte es 0 Jahre 5 Tage 5 Stunden 57 Minuten und 36 Sekunden sein.

// Ich hasse meine mathematischen Fähigkeiten.

+2

entmutigende Aufgabe. Es ist unmöglich zu sagen, wie viele Sekunden im Jahr insgesamt sind. – SergeyA

+0

Wenn dies eine Hausaufgabenaufgabe ist, denken Sie bitte daran, dass Sie nichts davon lernen werden, wenn Sie die Lösung von jemand anderem bekommen. Ich würde vorschlagen, dass Sie Stift und Papier nehmen und versuchen, herauszufinden, wie es geht – user463035818

+0

Es ist ein einfaches Jahr 365 Tage. – RexBruin17

Antwort

3

Sie haben die Reihenfolge secDis und yearsSec umgekehrt in der Zeile, um die Anzahl der Tage zu berechnen.

Auch die Anzahl der Sekunden an einem Tag sind: 24 x 60 x 60, die 86400 ist. Sie sind ab einer Bestellung von 60.

Die Anzahl der verbleibenden Sekunden nach der Anzahl der Jahre ist (secDis % yearsSec). Daher müssen Sie verwenden:

days = (secDis % yearsSec)/86400; 
2

@HowardHinnant ein Schweizer-Armee-Messer date library für solche Fragen zur Verfügung gestellt hat, siehe this Q&A, wonach

std::cout << human_readable_difference(second_point{453456s}, 
             second_point{0s});} 

will indeed print mit:

0 Jahre 0 Monate 5 Tage 5 Stunden 57 Minuten 36 Sekunden

1

Ich mag wirklich TemplateRex's answer! (Uplooted es).

Aber hier ist ein Weg, um dieses Problem zu lösen, nur mit der <chrono> Bibliothek, Ihre Definition davon aus, dass 365 Tage im Jahr ist (eine ziemlich grobe Annahme):

#include <chrono> 
#include <iostream> 

int 
main() 
{ 
    using namespace std; 
    using namespace std::chrono; 

    using days = duration<int, ratio_multiply<ratio<24>, hours::period>>; 
    using years = duration<int, ratio_multiply<ratio<365>, days::period>>; 

    auto s = 453456s; 
    auto y = duration_cast<years>(s); 
    s -= y; 
    auto d = duration_cast<days>(s); 
    s -= d; 
    auto h = duration_cast<hours>(s); 
    s -= h; 
    auto m = duration_cast<minutes>(s); 
    s -= m; 
    std::cout << y.count() << " years " 
       << d.count() << " days " 
       << h.count() << " hours " 
       << m.count() << " minutes " 
       << s.count() << " seconds\n"; 
} 

<chrono> bereits Einheiten hours, minutes und seconds . Fügen Sie einfach zwei weitere Einheiten für days und years hinzu, und jetzt können Sie einfach duration_cast verwenden, um nacheinander die seconds in gröbere Einheiten abzuschneiden und dann diese Verkürzung von den Sekunden zu subtrahieren (eine Modulooperation). Fahren Sie einfach mit feineren und feineren Einheiten fort, bis Sie zu Ihrem besten Gerät sind (seconds in diesem Beispiel). Die oben genannten Programmausgaben:

0 years 5 days 5 hours 57 minutes 36 seconds 

Auf diese Weise können <chrono> für Sie alle Konvertierungen, die Möglichkeit von Fehlern zu reduzieren.

0

Sie möchten den Rest aus der Abteilung secDis/yearsSec, die secDis % yearsSec ist - nicht yearsSec % secDis.
(Um den Rest zu erhalten, ersetzen Sie / durch %.

)

Ich glaube, es einfacher wird, wenn Sie die Anzahl der Sekunden in jeder Zeiteinheit explizit definieren:

jeden Schritt der Berechnungen
// Let the computer do the computing. 
const int perMinute = 60; 
const int perHour = 60 * perMinute; 
const int perDay = 24 * perHour; 
const int perYear = 365 * perDay; 

und buchstabieren:

int years =  totalSeconds/perYear; 
int daySeconds = totalSeconds % perYear; 
int days =  daySeconds/perDay; 
int hourSeconds = daySeconds % perDay; 
int hours =  hourSeconds/perHour; 
// ... 
Verwandte Themen