Convertire secondi per Giorni, minuti e secondi
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.
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);