سؤال

مرحبا جميعا. لقد استمرت في تعلم C ++ وتم تعيين "التحدي" لتحويل ثوان إلى تنسيق الأيام والدقائق والثواني.

على سبيل المثال: 31600000 = 365 يوما، 46 دقيقة، 40 ثانية.

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;

إنه يعمل ويأتي مع الإجابة الصحيحة ولكن بعد إكماله نظرت إلى كيف قد تناول الناس الآخرون وأنهم مختلفة. أنا أتساءل عما إذا كنت أفتقد شيئا ما.

شكرا، دان.

هل كانت مفيدة؟

المحلول

أحد الأشياء حول البرمجة هو أنه لا توجد طريقة واحدة فقط للقيام بشيء ما. في الواقع، إذا كنت قد حددت رأيي، فقد أكون قادرا على التوصل إلى عشرة طرق مختلفة تماما لإنجاز ذلك. أنت لا تفتقد أي شيء إذا كان التعليمات البرمجية التي تلبي المتطلبات.

لتسلية الخاص بك، إليك طريقة لتنسيق ساعات العمل: الدقائق: الثواني تحت Windows (elapsed هو مزدوج ويمثل عدد الثواني المنقضية منذ ... شيء ما)

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

نصائح أخرى

يبدو لي أن أكون أسهل طريقة لتحويل ثواني إلى 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;

اتمني ان يكون مفيدا!

يعتبر،

Stoycho.

أعتقد أن التحدي من كتاب ستيفن براتا. لقد فعلت ذلك على النحو التالي:

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

على سبيل المثال: 31600000 = 365 يوما، 46 دقيقة، 40 ثانية.

حقًا؟

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

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

هل تقصد "تحويل المدخلات إلى الأيام والساعات والدقائق والثواني، ثم تجاهل الساعات" أو "تحويل المدخلات إلى أيام، إجمالي الدقائق في غضون يوم واحد (IE يمكن أن يكون أكثر من 60)، والثواني"؟

في الحالة الثانية، أعتقد أنه يجب عليك استبدال التعليمات لمدة دقائق

long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top