Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何加/减两个';小时数';作为整数?_C++_Time - Fatal编程技术网

C++ 如何加/减两个';小时数';作为整数?

C++ 如何加/减两个';小时数';作为整数?,c++,time,C++,Time,我知道这可能是一个愚蠢的问题,但我有一些麻烦,我感到羞耻,但我真的不知道,如何使它。我想加减两个整数形式的“小时” #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;

我知道这可能是一个愚蠢的问题,但我有一些麻烦,我感到羞耻,但我真的不知道,如何使它。我想加减两个整数形式的“小时”

#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;
}
为什么不呢

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 t1 = ((h1 * 60) + m1) * 60 + s1;
int t2 = ((h2 * 60) + m2) * 60 + s2;
int tdiff = t1 - t2;
if (tdiff < 0) { tdiff += 24 * 60 * 60;
//添加
内部相对湿度=0,内部相对湿度=0,内部相对湿度=0;
rS=s1+s2;
如果(rS>60)
{
rM++;
rS%=60;
}
rM+=m1+m2;
如果(rM>60)
{
rH++;
rM%=60;
}
rH+=h1+h2;
如果(相对湿度>24)
{
//还有一天,谁在乎呢
相对湿度%=24;
}
cout
//添加
内部相对湿度=0,内部相对湿度=0,内部相对湿度=0;
rS=s1+s2;
如果(rS>60)
{
rM++;
rS%=60;
}
rM+=m1+m2;
如果(rM>60)
{
rH++;
rM%=60;
}
rH+=h1+h2;
如果(相对湿度>24)
{
//还有一天,谁在乎呢
相对湿度%=24;
}
cout一种方法可以是(假设您想添加两次,而不是简单地添加小时部分),即:

  • 将第一次时间转换为总秒数(为每个组件使用适当的乘数,小时/分钟和秒)
  • 以同样的方式转换第二次
  • 现在,根据需要进行加法/减法-这将为您提供以秒为单位的新时间
  • 如果新时间小于0,则向其添加一天的秒数,如果新时间大于一天的秒数,则减去
  • 然后,以秒为单位的结果值可以通过与步骤1相反的方式分解为小时分钟和秒(提示您需要模运算符…)
  • 编辑:哦,为什么我要费心提供想法而不是代码,而folk(显然应该更了解)只是提供代码(

    一种方法可能是(假设您想添加两次而不是简单的小时组成部分)将是:

  • 将第一次时间转换为总秒数(为每个组件使用适当的乘数,小时/分钟和秒)
  • 以同样的方式转换第二次
  • 现在,根据需要进行加法/减法-这将为您提供以秒为单位的新时间
  • 如果新时间小于0,则向其添加一天的秒数,如果新时间大于一天的秒数,则减去
  • 然后,以秒为单位的结果值可以通过与步骤1相反的方式分解为小时分钟和秒(提示您需要模运算符…)

  • 编辑:哦,为什么我要费心提供想法而不是代码,而folk(显然应该知道得更清楚)只是提供代码……(

    您可以使用最低分辨率进行计算(在您的示例中为秒),如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;
    }
    
    #包括
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    //应该是:21:59:2
    室内相对湿度(0)、室内相对湿度(0)、室内相对湿度(0);
    int h1=12,m1=34,s1=56;
    int h2=9,m2=24,s2=6;
    rS=s1+s2;
    而(rS>=60)
    {
    rS-=60;
    rM++;
    }
    rM+=m1+m2;
    而(rM>=60)
    {
    rM-=60;
    rH++;
    }
    rH+=h1+h2;
    而(相对湿度>=24)
    {
    rS-=24;
    }
    
    cout如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;
    }
    
    #包括
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    //应该是:21:59:2
    室内相对湿度(0)、室内相对湿度(0)、室内相对湿度(0);
    int h1=12,m1=34,s1=56;
    int h2=9,m2=24,s2=6;
    rS=s1+s2;
    而(rS>=60)
    {
    rS-=60;
    rM++;
    }
    rM+=m1+m2;
    而(rM>=60)
    {
    rM-=60;
    rH++;
    }
    rH+=h1+h2;
    而(相对湿度>=24)
    {
    rS-=24;
    }
    

    CUT从秒开始……剩下的时间超过60分钟,继续下去,看起来好像需要加两倍而不是小时。@ Philipp——它是C++,不是java…大多数C应用程序把时间当作UNIX时间戳(一个整数,代表自1970 1月1日起的秒数)。。用于此操作的类型是时间。使用单个整数的优点是可以轻松地进行加减运算。还有一些函数可以将其转换为人类可读的日期:@Philipp仅供记录,
    time\t
    不必是整数类型,无论是在C还是在Unix中。(我从来没有听说过时间不是整数的实现。但是我熟悉的很多代码都将时间保持在一个
    双倍的
    ,作为一天的一小部分。)从秒开始……保持其余的60分钟以上,继续下去,看起来你需要添加两倍而不是小时。@ Philipp -它是C++,而不是java…大多数C应用程序把时间当作UNIX时间戳(一个整数,代表自1970 1月1日起的秒数)。。用于此操作的类型是时间。使用单个整数的优点是可以轻松地进行加减运算。还有一些函数可以将其转换为人类可读的日期:@Philipp仅供记录,
    time\t
    不必是整数类型,无论是在C还是在Unix中。(我从来没有听说过时间不是整数的实现。但是我熟悉的很多代码都将时间保持在一个
    双倍的
    ,作为一天的一小部分。)非常感谢!SubStraction怎么样,也许你能编写它?好的,我会尝试,稍等片刻,你会明白的!你缺少一些安全措施。如果秒、分或小时在开始时包含无效值,此代码可能会产生无效结果(例如,添加99秒到99秒)@duDE:你能看看我的减法吗?它不能正常工作,我不知道哪里出错了:(非常感谢!SubStraction如何,也许你能编写它?好的,我会尝试,等一下secHappy编程,你会明白的!你缺少一些安全措施。如果开始时秒、分或小时包含无效值,此代码可能会产生无效结果(例如,添加99秒到99秒)@
    
    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";
    
    #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;
    }