0

ばかげた質問かもしれませんが、いくつか問題があります。恥ずかしいですが、どうすればいいのか本当にわかりません。整数として指定された 2 つの「時間」を加算および減算したいと考えています。

#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

int main()
{
    // should be: 21:59:2
    int rH, rM, rS;

    int h1 = 12, m1 = 34, s1 = 56;
    int h2 = 9, m2 = 24, s2 = 6;

    if(h1 + h2 >= 24)
    {
        rH = abs(h2 + h1);
        m1 += 60;

        if(m1 + m2 >= 60)
        {
            rH = (m2 - m1);
        }

    }
    else
    {
        rH = h1 + h2;
    }

    cout << rH << " " << rM << " " << rS << " " << "\n";

    return 0;
}

上記を試しましたが、それ以上の方法がわかりません。date-timeオブジェクトを使用できません。

編集

減算、エラーがどこにあるのかわかりませんが、計算が間違っています:

#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

int main()
{
    int rH, rM, rS;
    int h1 = 12, m1 = 25, s1 = 29, h2 = 11, m2 = 12, s2 = 1;
    int sum1, sum2, sum;

    sum1 = (h1)*3600 + (m1)*60 + s1;
    sum2 = (h2)*3600 + (m2)*60 + s2;

    if(sum1 > sum2)
        sum = sum1-sum2;
    else
        sum = sum2-sum1;

    rS = sum %60;
    sum = sum/60;
    rM = sum % 60;
    rH = sum/60;

    std::cout << rH << " " << rM << " " << rS << " " << "\n";

    return 0;
}
4

4 に答える 4

2

なぜだめですか

int t1 = ((h1 * 60) + m1) * 60 + s1;
int t2 = ((h2 * 60) + m2) * 60 + s2;
int tdiff = t1 - t2;
if (tdiff < 0) { tdiff += 24 * 60 * 60;

次に、モジュラー算術と除算を使用して、時間などを取得します。

int tdiffs = tdiff % 60;
tdiff  = tdiff / 60;
int tdiffm = tdiff % 60;
tdiff h = tdiff / 60; 
于 2013-01-29T13:16:34.517 に答える
1
// addition
int rH=0, rM=0, rS=0; 

rS = s1+s2;
if (rS>60)
{
    rM++;
    rS %= 60;
}

rM += m1+m2;
if (rM>60)
{
    rH++;
    rM %= 60;
}

rH += h1+h2;
if (rH>24)
{
    // 1 day more, who cares
    rH %= 24;
}

cout << rH << " " << rM << " " << rS << " " << "\n";

//減算

int rH = 0、rM = 0、rS = 0; int h1 = 12、m1 = 25、s1 = 29、h2 = 11、m2 = 12、s2 = 1;

rS = s1 - s2;
if (rS<0)
{
    rM--;
    rS += 60;
}

rM += m1 - m2;
if (rM<0)
{
    rH--;
    rM += 60;
}

rH += h1 - h2;
if (rH<0)
{
    // Error occurred ...
}

cout << rH << " " << rM << " " << rS << " " << "\n";
于 2013-01-29T13:18:14.390 に答える
1

アプローチは次のようになります (単に時間コンポーネントではなく 2 つの時間を追加したいと仮定すると) は、次のようになります。

  1. 最初の時間を合計秒数に変換します (各コンポーネント、時間/分、および秒に適切な乗数を使用します)。
  2. 2回目も同様に変換
  3. 必要に応じて加算/減算します。これにより、新しい時間が秒単位で得られます。
  4. 新しい時刻が tan 0 未満の場合は 1 日分の秒を加算し、新しい時刻が 1 日分の秒を超える場合は減算します。
  5. 結果の秒単位の値は、ステップ 1 で行ったことと逆の方法で時分秒に分解できます (モジュロ演算子が必要になることを示唆しています...)。

編集:ああ、なぜ私はコードではなくアイデアを提供しようとするのですか?

于 2013-01-29T13:19:51.363 に答える
0

Ed Healが示すように、計算には最低の解像度(例では秒)で作業することができます。

または、最も重要でない値から始めて追加し、次のように次の値にキャリーを追加します。

#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

int main()
{
    // should be: 21:59:2
    int rH(0), rM(0), rS(0);

    int h1 = 12, m1 = 34, s1 = 56;
    int h2 = 9, m2 = 24, s2 = 6;

    rS = s1 + s2;
    while (rS >= 60)
    {
        rS -= 60;
        rM++;
    }

    rM += m1 + m2;
    while (rM >= 60)
    {
        rM -= 60;
        rH++;
    }

    rH += h1 + h2;
    while (rH >= 24)
    {
        rS -= 24;
    }

    cout << rH << " " << rM << " " << rS << " " << "\n";

    return 0;
}
于 2013-01-29T13:26:28.713 に答える