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