Odejmowanie 2 godzin jako inty

0

Napisałem dodawanie, to było proste:

#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;
}

Mam jednak problem z odejmowaniem 2 godzi, na takiej samej zasadzie. Mógłby ktoś pomóc?

0

To może chociaż jakaś mała podpowiedź? Napisałem tak, ale to nie do końca to, co chcę osiągnąć:

#include <iostream>
#include <iomanip>  

int main() {
    
    int rH=0, rM=0, rS=0;
    int h1 = 12, m1 = 34, s1 = 56;
    int h2 = 9, m2 = 24, s2 = 6;

    if((s1 - s2 > 0) && (m1 - m2 > 0) && (h1 - h2 > 0))
    {
        rH = h1 - h2;
        rM = m1 - m2;
        rS = s1 = s2;
    }

}
0

Hm, to też nie działa, liczy b. długo, a wyniku nie widać:

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

int main()
{
    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;
}
0

W warunkach while podajesz wielkości graniczne. W wersji z dodawaniem, np. dla sekund, gdy różnica wychodziła większa niż 60, to odejmowałeś jedną minutę od rM oraz zmniejszałeś rS o 60.
Wyjaśnij dlaczego to zrobiłeś w ten sposób.

Następnie wyjaśnij, dlaczego dodajesz do rS 60, gdy odejmujesz s2 = 6 od s1 = 56 (czyli rS = 50)?

0

Rozwiązałem:

int h,m,s;
int sum1,sum2,sum;
sum1 = (hr)*3600 + (min )*60 + sec ;
sum2 = (t.hr)*3600 + (t.min)*60 + t.sec;
if (sum1>sum2)
sum = sum1-sum2;
else
sum = sum2-sum1;
s = sum %60;
sum = sum/60;
m = sum % 60;
h = sum/60;

1 użytkowników online, w tym zalogowanych: 0, gości: 1