[英]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
顛倒secDis
和yearsSec
順序來計算天數。
另外,一天中的秒數是: 24 x 60 x 60
,即86400
。 您的訂單減少了60。
年數之后剩下的秒數是(secDis % yearsSec)
。 因此,您需要使用:
days = (secDis % yearsSec ) / 86400;
我真的很喜歡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>
已經具有hours
, minutes
和seconds
。 只需為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.