Question

Salut tout le monde. J'ai continue à apprendre le C ++ et j'ai mis le « défi » de conversion secondes pour formater les jours, minutes et secondes.

Par exemple:. 31600000 = 365 jours, 46 minutes, 40 secondes

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;

Il fonctionne et arrive avec la bonne réponse, mais après l'avoir terminé, je regarde comment les autres avaient abordé et leur était différent. Je me demande si je me manque quelque chose.

Merci, Dan.

Était-ce utile?

La solution

L'une des choses sur la programmation est qu'il n'y a jamais qu'une seule façon de faire quelque chose. En fait, si je devais me mettre à l'esprit, je pourrais être en mesure de trouver une douzaine de façons complètement différentes pour y parvenir. Tu ne manque rien si votre code est conforme aux exigences.

Pour votre amusement, voici un moyen de mettre en forme des heures: minutes: secondes sous Windows (elapsed est un double et représente le nombre de secondes écoulées depuis ... quelque chose)

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

Autres conseils

ce qui me semble être la meilleure façon de convertir en secondes 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;

J'espère que ça aide!

Cordialement,

Stoycho

Je pense que le défi du livre de Stephen Prata. Je l'ai fait comme suit:

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

Par exemple:. 31600000 = 365 jours, 46 minutes, 40 secondes

Vraiment?

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

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

Vouliez-vous dire « convertir l'entrée en jours, heures, minutes et secondes, puis défaussez les heures » ou « convertir l'entrée en jours, nombre total de minutes dans une journée (c.-à-peut être plus de 60), et les secondes » ?

Dans le second cas, je pense que vous devriez remplacer l'instruction pour les minutes avec

long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top