这里推荐把小时转换成分钟再换回小时计算,具体代码:
```cpp
#include <iostream>
using namespace std;
int a, b, c, d, m1, m2, m3, h, m;
int main()
{
cin >> a >> b >> c >> d;
m1 = a * 60 + b; //将起始时间的小时转成分钟
m2 = c * 60 + d; //将结束时间的小时转成分钟
m3 = m2 - m1; //计算时间
while (1)
{
if (m3 >= 60) //判断结果给出的分钟数是否满足进位为小时
{
m3 = m3 - 60;
h++; //将结果中小时+1,同时将对应的分钟数减少60
}
else //分钟数小于60,不能进位成小时的时候,跳出循环
{
m = m3;
break;
}
}
cout << h << " " << m << endl; //输出最后的答案
return 0;
}
```
by 权御天下 @ 2017-09-24 21:38:32
至于你的代码,问题在于计算分钟的时候如果数据的d>b的话,容易导致最终输出的分钟>60
最简单例子:
输入:1 14 2 16
正解:1 2
你的答案:0 62
如果不改进方法的话,建议在计算分钟后加if判断结果分钟是否大于60而决定是否进位小时
by 权御天下 @ 2017-09-24 21:47:21
楼上麻烦了。。。。
```cpp
#include<cstdio>
using namespace std;
int main() {
int a, b, c, d;scanf("%d%d%d%d",&a,&b,&c,&d);
a = (c - a) * 60 + d - b;
printf("%d %d", a/60, a%60);
return 0;
}
```
by 青衫白叙 @ 2017-09-25 21:38:55
直接输出不就好了?
```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
if(d-b<0)cout<<c-a-1<<" "<<d-b+60;
else cout<<c-a<<" "<<d-b;
return 0;
}
```
by 毛毛39015148 @ 2017-09-29 19:24:39
可能没有退位,例如10 15 20 0
by 01190220csl @ 2017-10-01 15:43:07