2016-04-08 65 views
1

因此,我們應該將453456秒轉換爲年,日,小時,分鐘和秒。我無法找到公式

但是,我似乎無法擺脫過去的歲月。

這是我到目前爲止有:

#include<iostream> 

using namespace std; 



int main(){ 
     int secDis; 
     int years; 
     const int yearsSec = 31536000; 
     int days; 
     cout << "Please give me the time of travel in seconds."; 
     cin >> secDis; 
     years = secDis/yearsSec; 
     days = (yearsSec%secDis)/1440; /*idk if I am on the right track*/ 
     cout << "You have been traveling for: " 
      << years << days; 

如果453456秒它應該是0年5月日14小時57分36秒。

//我討厭我的數學技能。

+2

艱鉅的任務。一般來說,一年中有多少秒是不可能的。 – SergeyA

+0

如果這是一項家庭作業任務,請考慮如果您從其他人那裏獲得解決方案,您將不會學習任何形式的任務。我建議你採取筆和紙,並試圖找出如何去做 – user463035818

+0

這是一個基本的365天的一年。 – RexBruin17

回答

3

您已將secDisyearsSec的順序顛倒過來以計算天數。

此外,一天中的秒數爲:24 x 60 x 60,即86400。您的訂單數量爲60個。

年數之後剩下的秒數爲(secDis % yearsSec)。 因此,你需要使用:

days = (secDis % yearsSec)/86400; 
2

@HowardHinnant提供了瑞士軍隊刀date library對於這樣的問題,請參見this Q&A,使用

std::cout << human_readable_difference(second_point{453456s}, 
             second_point{0s});} 

will indeed print之後:

0年0個月5天5小時57分36秒

1

我真的很喜歡TemplateRex's answer! (upvoted它)。

但在這裏要解決這個問題,只是<chrono>庫的方式,假設你的定義,一年爲365天(一個非常粗糙的假設):

#include <chrono> 
#include <iostream> 

int 
main() 
{ 
    using namespace std; 
    using namespace std::chrono; 

    using days = duration<int, ratio_multiply<ratio<24>, hours::period>>; 
    using years = duration<int, ratio_multiply<ratio<365>, days::period>>; 

    auto s = 453456s; 
    auto y = duration_cast<years>(s); 
    s -= y; 
    auto d = duration_cast<days>(s); 
    s -= d; 
    auto h = duration_cast<hours>(s); 
    s -= h; 
    auto m = duration_cast<minutes>(s); 
    s -= m; 
    std::cout << y.count() << " years " 
       << d.count() << " days " 
       << h.count() << " hours " 
       << m.count() << " minutes " 
       << s.count() << " seconds\n"; 
} 

<chrono>已經有單位hoursminutesseconds 。只需爲daysyears再添加兩個單位,現在只需使用duration_cast即可將seconds依次截斷爲較粗單位,然後從秒中減去截斷(模操作)。只要繼續使用更精細的單位,直到您找到最好的單位(本例中爲seconds)。以上程序的輸出:

0 years 5 days 5 hours 57 minutes 36 seconds 

這讓<chrono>爲你做所有的轉換,減少了出錯的機會。

0

你想要secDis/yearsSec的這個的餘數,而不是yearsSec % secDis
(即,要獲得剩餘部分,請將/替換爲%。)

我相信,如果你在每個時間單位明確定義的秒數變得越來越容易:

// Let the computer do the computing. 
const int perMinute = 60; 
const int perHour = 60 * perMinute; 
const int perDay = 24 * perHour; 
const int perYear = 365 * perDay; 

和拼寫出計算的每一步:

int years =  totalSeconds/perYear; 
int daySeconds = totalSeconds % perYear; 
int days =  daySeconds/perDay; 
int hourSeconds = daySeconds % perDay; 
int hours =  hourSeconds/perHour; 
// ...