9

こんにちは、みなさん。私はC++の学習を続けており、秒を日、分、秒の形式に変換するという「課題」を設定しています。

例:31600000 = 365日、46分、40秒。

using namespace std;
const int hours_in_day = 24;
const int mins_in_hour = 60;
const int secs_to_min = 60;

long input_seconds;
cin >> input_seconds;

long seconds = input_seconds % secs_to_min;
long minutes = input_seconds / secs_to_min % mins_in_hour;
long days = input_seconds / secs_to_min / mins_in_hour / hours_in_day;

cout << input_seconds << " seconds = "
     << days << " days, "
     << minutes << " minutes, "
     << seconds << " seconds ";

return 0;

それは機能し、正しい答えを思いつきますが、それを完了した後、私は他の人々がそれにどのように取り組んだかを調べました、そして彼らは異なっていました。何か足りないのかしら。

ありがとう、ダン。

4

4 に答える 4

6

プログラミングに関することの 1 つは、何かを行う方法が 1 つだけではないということです。実際、私がそれに決心すれば、これを達成するためのまったく異なる方法を 12 通り思いつくことができるかもしれません。コードが要件を満たしていれば、何も見逃すことはありません。

ご参考までに、Windows で時間:分:秒をフォーマットする方法を次に示します (elapsedこれは double であり、経過した秒数を表します... 何か)

sprintf_s<bufSize>(buf, "%01.0f:%02.0f:%02.2f", floor(elapsed/3600.0), floor(fmod(elapsed,3600.0)/60.0), fmod(elapsed,60.0));
于 2010-03-10T18:45:49.917 に答える
5

スティーブン・プラタの本からの挑戦だと思います。私は次のようにしました:

#include <iostream>

using namespace std;

int main()
{
    long input_seconds = 31600000;

    const int cseconds_in_day = 86400;
    const int cseconds_in_hour = 3600;
    const int cseconds_in_minute = 60;
    const int cseconds = 1;

    long long days = input_seconds / cseconds_in_day;
    long hours = (input_seconds % cseconds_in_day) / cseconds_in_hour;
    long minutes = ((input_seconds % cseconds_in_day) % cseconds_in_hour) / cseconds_in_minute;
    long seconds = (((input_seconds % cseconds_in_day) % cseconds_in_hour) % cseconds_in_minute) / cseconds;
    cout << input_seconds << " seconds is " << days << " days, " << hours << " hours, " << minutes << " minutes, and " << seconds << " seconds.";

    cin.get();
    return 0;
}
于 2014-11-06T20:21:57.373 に答える
1

例:31600000 = 365日、46分、40秒。

本当に?

$ bc
365*24*60*60 + 46*60 + 40
31538800

365*24*60*60 + 1066*60 + 40
31600000

「入力を日、時間、分、秒に変換してから時間を破棄する」または「入力を日、1日以内の合計分(60を超える場合もある)、および秒に変換する」という意味ですか?

2番目のケースでは、数分間の指示を次のように置き換える必要があると思います

long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
于 2010-03-10T19:18:13.980 に答える