# Calculate the angle between hour hand and minute hand

This problem is known 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;` `      ``h += 1;` `       ``if``(h>12)` `        ``h = h-12;` `     ``} `   `    ``// Calculate the angles moved ` `    ``// by hour and minute hands ` `    ``// with reference to 12:00 ` `    ``float` `hour_angle = 0.5 * (h * 60 + m); ` `    ``float` `minute_angle = 6 * m; `   `    ``// Find the difference between two angles ` `    ``float` `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;` `      ``h += 1;` `       ``if``(h>12)` `        ``h = h-12;` `     ``} `     `    ``// 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``;` `        ``h += ``1``;` `        ``if``(h>``12``)` `          ``h = h-``12``;` `        ``} `     `        ``// 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` `            ``h ``+``=` `1``;` `            ``if``(h>``12``):` `                   ``h ``=` `h``-``12``;` `        `  `        ``# 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;` `        ``h += 1;` `        ``if``(h>12)` `          ``h = h-12;` `       ``} `   `        ``// 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;` `        ``\$h` `+= 1;` `        ``if``(``\$h``>12)` `          ``\$h` `= ``\$h``-12;` `    ``}`   `    ``// 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.