预先设定差一天后用余数处理,需要注意时间差为24小时的时候取余会变为0,需要特殊处理一下。
#include<stdio.h>
int main(void)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
b+=a*60,d+=c*60;
a=(d-b+24*60)%(24*60);
a=(a)?(a):(24*60);
printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)\n",a/60,a%60);
return 0;
}
这段代码是一个简单的C程序,用于计算两个时间点之间的时间差,并以小时和分钟的形式输出结果。下面是代码的解释:
int a, b, c, d;:这里声明了四个整数变量a、b、c和d,用于存储输入和计算结果。
scanf(“%d%d%d%d”, &a, &b, &c, &d);:这一行代码使用scanf函数从标准输入中读取四个整数,分别存储到变量a、b、c和d中。这四个整数表示两个时间点的小时和分钟。
b += a * 60, d += c * 60;:这两行代码将输入的小时部分(a和c)转换为分钟并与原来的分钟部分(b和d)相加,以便后面的计算更容易处理。这是因为通常在计算时间差时,将时间转换为分钟更方便。
a = (d - b + 24 * 60) % (24 * 60);:这一行代码计算了两个时间点之间的时间差,将结果存储在变量a中。首先,它计算了分钟级别的时间差(d - b),然后加上24小时的分钟表示(24 * 60),最后取模(%)运算以确保结果在一天(24 * 60分钟)内。
a = (a) ? (a) : (24 * 60);:这一行代码检查如果a为0(表示两个时间点相同),则将a设置为24小时(24 * 60分钟),否则保持不变。这是为了确保当两个时间点相同时,输出的时间差是24小时。
printf(“O JOGO DUROU %d HORA(S) E %d MINUTO(S)\n”, a / 60, a % 60);:最后一行使用printf函数输出计算出的时间差。它将时间差a分为小时部分(a / 60)和分钟部分(a % 60),并将结果格式化为一句话,以显示小时和分钟的时间差。
return 0;:这是main函数的结束,表示程序正常结束,并将0返回给操作系统,表示程序执行成功。
这是神仙评论吧?!!感谢!!!
a = (a) ? (a) : (24 * 60)这是什么意思,我还是没有看懂(哭),(a)为什么是检查a为0?
三元运算符
如果问号前面的表达式为真,则将冒号左边的变量赋值给a;当a不为0时(非0参数=真),就会把a自己赋值给a自己
太牛了,我是傻逼
duck 不必[doge]
if(b >= d) d += 24 * 60; a = d - b;
我在这纠结住了,现在想通了
666
太妙了,取余后无论d-b是正负,都只会剩下实际值
注释为什么是1400,不是1220吗
应该是1440
## 我是sb
傻瓜做法
+1 看难过了
+1 看难过了
+1 看难过了
+1 看难过了
+1 看难过了
好好好
别太好笑 怎么发出呜这么多遍
我+1
老实人做法,我的稍微比你好一点哈哈哈哈
我看懂了,我学会了,我不是sb了,耶
请问这步a=(a)?(a):(24*60)是什么意思呀
a不为0时取a,a=0时取一天的总分钟
看懂了QAQ
牛逼牛逼
大家听我宣布个事:
#我是个傻*
这个做法确实优雅,我好久都没用到三目运算符了
优雅!
我是煞笔
妙蛙
优雅
妙啊,我好傻逼啊QAQ
nb
实在是优雅
好牛!!我用了一堆if,我是纱布
2.整体思路是通过准确计算相差时间 关键点在于算出相差时间(分钟)后,通过加上预设的一天再整体取余不仅不会影响正值,负值也可以借助取余相减出实际值
大佬啊 我一堆判断语句給自己都写不会了
xdm,俺也一样是个sb,还在那里框框if呢