Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แปลงวินาทีเป็นวัน ชั่วโมง นาที วินาทีใน C++

โจทย์ปัญหา

แปลงจำนวนวินาทีเป็นรูปแบบ วัน ชั่วโมง นาที วินาที

ตัวอย่าง

Input: 126700 วินาที
Output: 1 days 11 hours 11 minutes 40 seconds

วิธีคำนวณ

  1. days = seconds / (24 * 3600)
  2. seconds %= (24 * 3600)
  3. hours = seconds / 3600
  4. seconds %= 3600
  5. minutes = seconds / 60
  6. seconds %= 60

โค้ดตัวอย่าง (C++)

#include <bits/stdc++.h>
using namespace std;

void convertSeconds(int totalSeconds) {
    int days = totalSeconds / (24 * 3600);
    totalSeconds %= (24 * 3600);

    int hours = totalSeconds / 3600;
    totalSeconds %= 3600;

    int minutes = totalSeconds / 60;
    int seconds = totalSeconds % 60;

    cout << days << " days "
         << hours << " hours "
         << minutes << " minutes "
         << seconds << " seconds" << endl;
}

int main() {
    int n = 126700;
    convertSeconds(n);

    // Additional tests
    convertSeconds(3600);      // 1 hour
    convertSeconds(86400);     // 1 day
    convertSeconds(90061);     // 1 day 1 hour 1 min 1 sec
    return 0;
}

ผลลัพธ์

1 days 11 hours 11 minutes 40 seconds
0 days 1 hours 0 minutes 0 seconds
1 days 0 hours 0 minutes 0 seconds
1 days 1 hours 1 minutes 1 seconds

คำอธิบายเพิ่มเติม

  • ใช้ Modulo Operator (%) เพื่อแยกเศษซ้ำๆ
  • คงที่: 1 นาที = 60 วินาที, 1 ชั่วโมง = 3600 วินาที, 1 วัน = 86400 วินาที
  • Time/Space Complexity: O(1)
  • ขยายได้: เพิ่ม Week, Month, Year (แต่เดือน/ปีมีความยาวไม่คงที่)
  • C++20: ใช้ std::chrono ได้สะดวกกว่า

C++20 Chrono Version (Modern)

#include <chrono>
#include <iostream>
using namespace std::chrono;

int main() {
    seconds s(126700);
    auto days = duration_cast<days>(s); s -= days;
    auto hours = duration_cast<hours>(s); s -= hours;
    auto mins = duration_cast<minutes>(s); s -= mins;

    cout << days.count() << " days "
         << hours.count() << " hours "
         << mins.count() << " minutes "
         << s.count() << " seconds\n";
    return 0;
}