Calculate the angle between hour hand and minute hand

This problem is know as Clock angle problem where we need to find angle between hands of an analog clock at a given time.

Examples:

Input:  h = 12:00, m = 30.00
Output: 165 degree

Input:  h = 3.00, m = 30.00
Output: 75 degree

The idea is to take 12:00 (h = 12, m = 0) as a reference. Following are detailed steps.

1) Calculate the angle made by hour hand with respect to 12:00 in h hours and m minutes.
2) Calculate the angle made by minute hand with respect to 12:00 in h hours and m minutes.
3) The difference between two angles is the angle between two hands.

How to calculate the two angles with respect to 12:00?
The minute hand moves 360 degree in 60 minute(or 6 degree in one minute) and hour hand moves 360 degree in 12 hours(or 0.5 degree in 1 minute). In h hours and m minutes, the minute hand would move (h*60 + m)*6 and hour hand would move (h*60 + m)*0.5.

C++

 // C++ program to find angle between hour and minute hands  #include using namespace std;    // Utility function to find minimum of two integers  int min(int x, int y)  {      return (x < y)? x: y;         }     int calcAngle(double h, double m)  {      // validate the input      if (h <0 || m < 0 || h >12 || m > 60)          printf("Wrong input");         if (h == 12) h = 0;      if (m == 60) m = 0;         // Calculate the angles moved      // by hour and minute hands      // with reference to 12:00      int hour_angle = 0.5 * (h * 60 + m);      int minute_angle = 6 * m;         // Find the difference between two angles      int angle = abs(hour_angle - minute_angle);         // Return the smaller angle of two possible angles      angle = min(360 - angle, angle);         return angle;  }     // Driver program to test above function  int main()  {      cout << calcAngle(9, 60) << endl;      cout << calcAngle(3, 30) << endl;      return 0;  }     // This is code is contributed by rathbhupendra

C

 // C program to find angle between hour and minute hands #include #include    // Utility function to find minimum of two integers int min(int x, int y) { return (x < y)? x: y; }    int calcAngle(double h, double m) {     // validate the input     if (h <0 || m < 0 || h >12 || m > 60)         printf("Wrong input");        if (h == 12) h = 0;     if (m == 60) m = 0;        // Calculate the angles moved by hour and minute hands     // with reference to 12:00     int hour_angle = 0.5 * (h*60 + m);     int minute_angle = 6*m;        // Find the difference between two angles     int angle = abs(hour_angle - minute_angle);        // Return the smaller angle of two possible angles     angle = min(360-angle, angle);        return angle; }    // Driver program to test above function int main() {     printf("%d n", calcAngle(9, 60));     printf("%d n", calcAngle(3, 30));     return 0; }

Java

 // Java program to find angle between hour and minute hands import java.io.*;    class GFG  {     // Function to calculate the angle     static int calcAngle(double h, double m)     {         // validate the input         if (h <0 || m < 0 || h >12 || m > 60)             System.out.println("Wrong input");            if (h == 12)             h = 0;         if (m == 60)              m = 0;            // Calculate the angles moved by hour and minute hands         // with reference to 12:00         int hour_angle = (int)(0.5 * (h*60 + m));         int minute_angle = (int)(6*m);            // Find the difference between two angles         int angle = Math.abs(hour_angle - minute_angle);            // smaller angle of two possible angles         angle = Math.min(360-angle, angle);            return angle;     }            // Driver program     public static void main (String[] args)      {         System.out.println(calcAngle(9, 60)+" degree");         System.out.println(calcAngle(3, 30)+" degree");     } }    // Contributed by Pramod Kumar

Python

 # Python program to find angle  # between hour and minute hands    # Function to Calculate angle b/w  # hour hand and minute hand  def calcAngle(h,m):                    # validate the input         if (h < 0 or m < 0 or h > 12 or m > 60):             print('Wrong input')                    if (h == 12):             h = 0         if (m == 60):             m = 0                    # Calculate the angles moved by          # hour and minute hands with          # reference to 12:00         hour_angle = 0.5 * (h * 60 + m)         minute_angle = 6 * m                    # Find the difference between two angles         angle = abs(hour_angle - minute_angle)                    # Return the smaller angle of two          # possible angles         angle = min(360 - angle, angle)                    return angle    # Driver program   h = 9 m = 60 print('Angle ', calcAngle(h,m))    # This code is contributed by Danish Raza

C#

 // C# program to find angle between // hour and minute hands using System;    class GFG {            // Function to calculate the angle     static int calcAngle(double h, double m)     {         // validate the input         if (h < 0 || m < 0 ||              h > 12 || m > 60)             Console.Write("Wrong input");            if (h == 12)             h = 0;                        if (m == 60)              m = 0;            // Calculate the angles moved by hour and         // minute hands with reference to 12:00         int hour_angle = (int)(0.5 * (h * 60 + m));         int minute_angle = (int)(6 * m);            // Find the difference between two angles         int angle = Math.Abs(hour_angle - minute_angle);            // smaller angle of two possible angles         angle = Math.Min(360 - angle, angle);            return angle;     }            // Driver code     public static void Main ()      {         Console.WriteLine(calcAngle(9, 60));         Console.Write(calcAngle(3, 30));     } }    // This code is contributed by Nitin Mittal.

PHP

 12 || \$m > 60)         echo "Wrong input";        if (\$h == 12) \$h = 0;     if (\$m == 60) \$m = 0;        // Calculate the angles      // moved by hour and      // minute hands with      // reference to 12:00     \$hour_angle = 0.5 *                    (\$h * 60 + \$m);     \$minute_angle = 6 * \$m;        // Find the difference     // between two angles     \$angle = abs(\$hour_angle -                   \$minute_angle);        // Return the smaller angle     // of two possible angles     \$angle = min(360 - \$angle,                         \$angle);            return \$angle; }    // Driver Code echo calcAngle(9, 60), " "; echo calcAngle(3, 30), " ";    // This code is contributed by ajit ?>

Output:

90
75

Exercise: Find all times when hour and minute hands get superimposed.