Program to calculate the number of odd days in given number of years

Given an integer N, the task is to find the number of odd days in the years from 1 to N.
Odd Days: Number of odd days refer to those days that are left in a certain year(s) when it’s days gets converted into weeks. Say, an ordinary year has 365 days, that is 52 weeks and one odd day. This means, out of the 365 days in an ordinary year, 364 days will get converted into 52 weeks and one day will remain. This one day is referred to as 1 odd day.

  • Simply the modulus total number of days by 7(days in a week) gives us the number of odd days.
  • It’s value lies between 0 to 6 only. [0, 6]
  • Leap Year: Every year divisible either by 400 or by 4 but not 100
  • Ordinary Year: Years Except Leap Years
  • Every Ordinary Year has 1 odd day.
  • Every Leap Year has 2 odd days.

Examples:

Input: N = 8
Output: 3
Out of the 8 years, 4 and 8 are the only leap years.
(6 x 1) + (2 x 2) = 10 i.e. 1 week and 3 days

Input: N = 400
Output: 0

Approach:

  1. Count number of ordinary years and number of leap years out of given N years.
  2. Calculate the overall number of days.
  3. Print the modulo(7) of the total number of days.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <iostream>
using namespace std;
  
// Function to return the count of odd days
int oddDays(int N)
{
  
    // Count of years divisible
    // by 100 and 400
    int hund1 = N / 100;
    int hund4 = N / 400;
  
    // Every 4th year is a leap year
    int leap = N >> 2;
    int ord = N - leap;
  
    // Every 100th year is divisible by 4
    // but is not a leap year
    if (hund1) {
        ord += hund1;
        leap -= hund1;
    }
  
    // Every 400th year is divisible by 100
    // but is a leap year
    if (hund4) {
        ord -= hund4;
        leap += hund4;
    }
  
    // Total number of extra days
    int days = ord + leap * 2;
  
    // modulo(7) for final answer
    int odd = days % 7;
  
    return odd;
}
  
// Driver code
int main()
{
  
    // Number of days
    int N = 100;
    cout << oddDays(N);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
class GFG {
  
    // Function to return the count of odd days
    static int oddDays(int N)
    {
        // Count of years divisible
        // by 100 and 400
        int hund1 = N / 100;
        int hund4 = N / 400;
  
        // Every 4th year is a leap year
        int leap = N >> 2;
        int ord = N - leap;
  
        // Every 100th year is divisible by 4
        // but is not a leap year
        if (hund1 > 0) {
            ord += hund1;
            leap -= hund1;
        }
  
        // Every 400th year is divisible by 100
        // but is a leap year
        if (hund4 > 0) {
            ord -= hund4;
            leap += hund4;
        }
  
        // Total number of extra days
        int days = ord + leap * 2;
  
        // modulo(7) for final answer
        int odd = days % 7;
  
        return odd;
    }
  
    // Driver code
    public static void main(String args[])
    {
  
        // Number of days
        int N = 100;
        System.out.print(oddDays(N));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
  
# Function to return the count of odd days
def oddDays(N):
  
    # Count of years divisible
    # by 100 and 400
    hund1 = N // 100
    hund4 = N // 400
  
    # Every 4th year is a leap year
    leap = N >> 2
    ordd = N - leap
  
    # Every 100th year is divisible by 4
    # but is not a leap year
    if (hund1):
        ordd += hund1
        leap -= hund1
  
    # Every 400th year is divisible by 100
    # but is a leap year
    if (hund4):
        ordd -= hund4
        leap += hund4
  
    # Total number of extra days
    days = ordd + leap * 2
  
    # modulo(7) for final answer
    odd = days % 7
  
    return odd
  
# Driver code
  
# Number of days
N = 100
print(oddDays(N))
  
# This code is contributed
# by mohit kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
  
class GFG 
{
  
    // Function to return the count of odd days
    static int oddDays(int N)
    {
        // Count of years divisible
        // by 100 and 400
        int hund1 = N / 100;
        int hund4 = N / 400;
  
        // Every 4th year is a leap year
        int leap = N >> 2;
        int ord = N - leap;
  
        // Every 100th year is divisible by 4
        // but is not a leap year
        if (hund1 > 0) 
        {
            ord += hund1;
            leap -= hund1;
        }
  
        // Every 400th year is divisible by 100
        // but is a leap year
        if (hund4 > 0) 
        {
            ord -= hund4;
            leap += hund4;
        }
  
        // Total number of extra days
        int days = ord + leap * 2;
  
        // modulo(7) for final answer
        int odd = days % 7;
  
        return odd;
    }
  
    // Driver code
    static void Main()
    {
  
        // Number of days
        int N = 100;
        Console.WriteLine(oddDays(N));
    }
}
  
// This code is contributed by mits

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach 
  
// Function to return the count of odd days 
function oddDays($N
  
    // Count of years divisible 
    // by 100 and 400 
    $hund1 = floor($N / 100); 
    $hund4 = floor($N / 400); 
  
    // Every 4th year is a leap year 
    $leap = $N >> 2; 
    $ord = $N - $leap
  
    // Every 100th year is divisible by 4 
    // but is not a leap year 
    if ($hund1
    
        $ord += $hund1
        $leap -= $hund1
    
  
    // Every 400th year is divisible by 100 
    // but is a leap year 
    if ($hund4
    
        $ord -= $hund4
        $leap += $hund4
    
  
    // Total number of extra days 
    $days = $ord + $leap * 2; 
  
    // modulo(7) for final answer 
    $odd = $days % 7; 
  
    return $odd
  
// Driver code 
  
// Number of days 
$N = 100; 
  
echo oddDays($N); 
  
// This code is contributed by Ryuga
?>

chevron_right


Output:

5


My Personal Notes arrow_drop_up

Techie Geek

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.