# 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
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

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), ``"\n"``; ` `echo` `calcAngle(3, 30), ``"\n"``; ` ` `  `// This code is contributed by ajit ` `?> `

Output:

```90
75
```

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