C++ c++;UVA 579-时钟指针错误答案

C++ c++;UVA 579-时钟指针错误答案,c++,C++,我试图解决这个问题,但系统总是给我“错误的答案”。我检查了其他人的解决方案,我确信我的算法是正确的。有人能帮我吗?谢谢。 问题: #include <iostream> #include <cstdio> #include <cmath> using namespace std; int main() { int hour, minute; float hour_degree, minute_degree; float total;

我试图解决这个问题,但系统总是给我“错误的答案”。我检查了其他人的解决方案,我确信我的算法是正确的。有人能帮我吗?谢谢。 问题:

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

int main()
{
    int hour, minute;
    float hour_degree, minute_degree;
    float total;
    while(scanf("%d:%d",&hour, &minute) == 2)
    {
        if( hour == 0 && minute == 0)
            break;
        minute_degree = minute * 6;
        hour_degree = hour * 30 + float(minute / 2);
        total = fabs(hour_degree - minute_degree);
        if(total > 180)
            total = fabs(360 - total);
        printf("%.3f\n", total); 
    }
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
整小时,分钟;
浮动小时度、分钟度;
浮动总额;
而(扫描频率(“%d:%d”、&小时和分钟)==2)
{
如果(小时=0和分钟=0)
打破
分钟度=分钟*6;
小时度=小时*30+浮动(分钟/2);
总计=fabs(小时度-分钟度);
如果(总数>180)
总计=晶圆厂(360-总计);
printf(“%.3f\n”,总计);
}
返回0;
}
我在这里发现了一个bug

hour_degree = hour * 30 + float(minute / 2);
您正在进行整数除法,如果
minute
是奇数,则会出错。应该是

hour_degree = hour * 30 + float(minute / 2.0);

我用g++4.4编译了你的程序,结果很好!!!谢谢!那么,如果我使用“分钟/2.0”,我还需要将数字转换为浮点吗?您可以使用
(分钟/2.0f)
而无需显式转换。括号不是必需的,但为了可读性。