Domanda

Ciao a tutti. Ho continuando a imparare il C ++ e ho impostato la 'sfida' di conversione di secondi per formattare come i giorni, minuti e secondi.

Ad esempio:. 31600000 = 365 giorni, 46 minuti, 40 secondi

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;

Si lavora e si presenta con la risposta corretta, ma dopo averlo completato ho guardato come altre persone avevano affrontato e loro era diverso. Mi chiedo se mi manca qualcosa.

Grazie, Dan.

È stato utile?

Soluzione

Una delle cose su di programmazione è che non c'è mai solo un modo per fare qualcosa. In realtà se dovessi impostare la mia mente ad esso, potrei essere in grado di elaborare una dozzina completamente diversi modi per ottenere questo risultato. Non manca nulla se il codice soddisfa i requisiti.

Per il vostro divertimento, ecco un modo per formattare fino ore: minuti: secondi sotto Windows (elapsed è un doppio e rappresenta il numero di secondi trascorsi dal ... qualcosa del genere)

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));

Altri suggerimenti

questo mi sembra essere il modo più semplice per convertire i secondi in 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;

Spero che aiuta!

Saluti,

Stoycho

Credo che la sfida dal libro di Stephen Prata. L'ho fatto nel seguente modo:

#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;
}
  

Ad esempio:. 31600000 = 365 giorni, 46 minuti, 40 secondi

Davvero?

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

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

Forse cercavi "convertire l'input in giorni, ore, minuti e secondi, e poi scarta le ore" o "convertire l'input in giorni, i minuti totali nell'arco di un giorno (cioè possono essere più di 60), e secondi" ?

Nel secondo caso penso che si dovrebbe sostituire l'istruzioni per i minuti con

long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top