九度 1553:时钟(模拟题)

题目描述:

如图,给定任意时刻,求时针和分针的夹角(劣弧所对应的角)。

 

输入:

输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成。

 

输出:

对于每组测试数据,输出一个浮点数,代表时针和分针的夹角(劣弧对应的角),用角度表示,结果保留两位小数。

 

样例输入:
03:00
14:45
样例输出:
90.00
172.50

总结:

1. 不要忘了, 分针的角度可以由分直接转换, 而时针则需要考虑分

 

代码:

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <cstdlib>
#include <cstring>
using namespace std;

char time1[20];

double timeToDegree(char *time) {
    int hour = 0, mini = 0;

    for(int i = 0; i < 2; i ++) {
        hour *= 10;
        mini *= 10;
        hour += time[0+i] - '0';
        mini += time[3+i] - '0';
    }

    hour %= 12;

    double degree1 = hour*360.0/12;
    double degree2 = mini*360.0/60;

    degree1 += (360.0/12)*mini/60;
    double dis = 0.0;
    if(degree1 > degree2)
        dis = degree1 - degree2;
    else
        dis = degree2 - degree1;
        
        
    if(dis > 180.0) {
        dis = 180 - (dis-180);
        //dis = 360.0-max(degree1, degree2) + min(degree1, degree2);
    }
    return dis;
}

int main() {
    while(scanf("%s", time1) != EOF) {
        double degree1 = timeToDegree(time1);
        double dis = timeToDegree(time1);
        printf("%0.2f\n", dis);
    }
    return 0;
}

 

posted @ 2014-03-17 20:37  SangS  阅读(484)  评论(0编辑  收藏  举报