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