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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to find angle between hour and minute hands
#include <stdio.h>
#include <stdlib.h>
  
// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find 
// angle between hour 
// and minute hands
  
// Utility function to 
// find minimum of two 
// integers
function mintwo($x, $y)
{
    return ($x < $y) ? 
                  $x : $y
}
  
function calcAngle($h, $m)
{
    // validate the input
    if ($h <0 || $m < 0 ||
        $h >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
?>

chevron_right



Output:

90 
75

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

This article is contributed by Ashish Bansal. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



My Personal Notes arrow_drop_up

Improved By : nitin mittal, jit_t