โจทย์ปัญหา
แปลงจำนวนวินาทีเป็นรูปแบบ วัน ชั่วโมง นาที วินาที
ตัวอย่าง
Input: 126700 วินาที
Output: 1 days 11 hours 11 minutes 40 seconds
วิธีคำนวณ
days = seconds / (24 * 3600)seconds %= (24 * 3600)hours = seconds / 3600seconds %= 3600minutes = seconds / 60seconds %= 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;
}