Pregunta

Hola a todos. He seguir aprendiendo C ++ y he estado establecer el 'desafío' de convertir segundos para dar formato a medida que los días, minutos y segundos.

Por ejemplo:. 31600000 = 365 días, 46 minutos, 40 segundos

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;

Funciona y se le ocurre la respuesta correcta, pero después de completarlo me miraba cómo otras personas habían abordado y el suyo era diferente. Me pregunto si me falta algo.

Gracias, Dan.

¿Fue útil?

Solución

Una de las cosas acerca de la programación es que nunca hay una sola manera de hacer algo. De hecho, si tuviera que poner mi mente en ello, podría ser capaz de llegar a una docena completamente diferentes maneras de lograr esto. Usted no está perdiendo nada si el código cumple con los requisitos.

Para su diversión, aquí es una manera de dar formato a horas: minutos: segundos bajo Windows (elapsed es un doble y representa el número de segundos transcurridos desde algo ...)

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

Otros consejos

esto me parece que es la forma más fácil de convertir en segundos 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;

Espero que ayude!

Saludos,

Stoycho

Creo que es el reto del libro de Stephen Prata. Lo hice de la siguiente manera:

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

Por ejemplo:. 31600000 = 365 días, 46 minutos, 40 segundos

En serio?

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

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

¿Se refiere a "convertir la entrada en días, horas, minutos y segundos, y luego desechar la hora" o "convertir la entrada en día, el total de minutos dentro de un día (es decir, puede haber más de 60), y segundo" ?

En el segundo caso, creo que se debe reemplazar la instrucción de minutos con

long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top