簡體   English   中英

我找不到公式

[英]I am having trouble finding a formula

因此,我們應該將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天5小時57分36秒。

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

您需要yearsSec顛倒secDisyearsSec順序來計算天數。

另外,一天中的秒數是: 24 x 60 x 60 ,即86400 您的訂單減少了60。

年數之后剩下的秒數是(secDis % yearsSec) 因此,您需要使用:

days = (secDis % yearsSec ) / 86400;

@HowardHinnant已為此類問題提供了瑞士軍刀日期庫 ,請參閱此問答 ,然后使用

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

確實會打印

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

我真的很喜歡TemplateRex的答案 (支持)。

但是,這是僅使用<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 只需為days years增加兩個單位,現在您就可以使用duration_cast依次將seconds截斷為更粗略的單位,然后從秒數中減去該截斷(取模操作)。 只需繼續使用越來越精細的單位,直到您達到最好的單位(本例中為seconds )。 上面的程序輸出:

0 years 5 days 5 hours 57 minutes 36 seconds

這使<chrono>為您完成所有轉換,從而減少了出錯的機會。

您需要secDis / yearsSec部門中的剩余部分,即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;
// ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM