Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/articles/c-tutorials/)
-   -   Check for a leap year (http://www.go4expert.com/articles/check-leap-year-t2099/)

pradeep 2Dec2006 00:32

Check for a leap year
 
C program to check whether a year is a leap year or not.

Code: C

/*
** C program to check whether an entered year is a leap year or not
** @author: Pradeep
** @date: 02/12/06
*/


#include<stdio.h>

int main(void)
{
    int year;
   
    printf("Enter the year: ");
    scanf("%d",&year);

    /*
    **    The logic is that the year is either divisible by both
    **    100 and 4 , OR its only divisible by 4 not by hundred
    */

    if(year%400 ==0 || (year%100 != 0 && year%4 == 0))
    {
        printf("Year %d is a leap year",year);
    }
    else
    {
        printf("Year %d is not a leap year",year);
    }
   
    return 0;
}


friendsforniraj 2Dec2006 18:28

Re: Check for a leap year
 
i want to know one thing that if yr is divisible by 400 than it will definately be divisible by 100
and if 1896 is leap yr than 1900 will definately be leap yr no checking reqd
so from ma pt. of view hecking divisibilty by 4 is enough

Aztec 2Dec2006 20:13

Re: Check for a leap year
 
Quote:

Originally Posted by friendsforniraj
so from ma pt. of view hecking divisibilty by 4 is enough

No, it's not. Leap year does not always comes after 4 years.
And yes, I did not do any typing mistake.

pradeep 3Dec2006 01:46

Re: Check for a leap year
 
As per the current Gregorian calendar the determination of the leap year is as follows :
  1. All non-century years divisible by four are leap years.
  2. All century years divisible by 400 is a leap year.
Which means 1900 & 2100 are not a leap years while year 2000 is a leap year.

Read more here..

bothie 4Dec2006 15:25

Re: Check for a leap year
 
can u provide code which print intreger values given the number in words

shabbir 4Dec2006 15:33

Re: Check for a leap year
 
Quote:

Originally Posted by bothie
can u provide code which print intreger values given the number in words

Why dont you try it yourself and when you are stuck you can definitely look for some assistant.

pradeep 16Dec2006 18:32

Re: Check for a leap year
 
Functions to check for leap year in various languages:

Code: JavaScript

function isLeapyear(year)
   {
       return year%400 ==0 || (year%100 != 0 && year%4 == 0);
   }


Code: PHP

function is_lear_year($year)
   {
       return $year%400 ==0 || ($year%100 != 0 && $year%4 == 0);
   }


Code: Perl

sub{
       $year = shift;
       return 1 if($year%400 ==0 || ($year%100 != 0 && $year%4 == 0));
       # else ;-)
       return 0;
   }


Code: VB

Function IsLeapYear(y)
       If y Mod 400 = 0 Or (y Mod 100 <> 0 And y Mod 4 = 0) Then
           IsLeapYear = True
       Else
           IsLeapYear = False
       End If
   End Function


rahul.mca2001 6Mar2008 13:49

Re: Check for a leap year
 
we do we need a reminer by 400

kb9snl 14Aug2009 23:08

Re: Check for a leap year
 
EXCELLENT post. I hadn't thought to check for leap this way. Saved me a lot of time with this math!

Thanks!

c_user 25Aug2009 00:41

Re: Check for a leap year
 
yup a good and a right program
have a gud day..

manoj1987 29Aug2009 18:41

Re: Check for a leap year
 
thanks :)

Deucel 14Feb2011 11:55

Re: Check for a leap year
 
Below is some code I wrote w/ pradeep's help. It was an assignment in a book I'm going through.

---------------------------------------------------------------------------------------------
Code:

#include<stdio.h>
main()
{
    int month, year, n, leap, notLeap;



    printf("\n\nEnter a month and year:  ");
    scanf("%d %d", &month, &year);



    if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))

        year = leap;

    else
        year = notLeap;

    if (year == leap && month == 2)
        n = 29;

    if (year == notLeap && month == 2)
        n = 28;

    if (month == 1) n = 31;
    if (month == 3) n = 31;
    if (month == 4) n = 30;
    if (month == 5) n = 31;
    if (month == 6) n = 30;
    if (month == 7) n = 31;
    if (month == 8) n = 31;
    if (month == 9) n = 30;
    if (month == 10) n = 31;
    if (month == 11) n = 30;
    if (month == 12) n = 31;

    printf("\n\nThere are %d days in that month.", n);


    getch();
    return;
}


Plastech 22Nov2011 03:12

Re: Check for a leap year
 
Quote:

The logic is that the year is either divisible by both 100 and 4 , OR its only divisible by 4 not by hundred
Your code is good but your logic isn't. Specifically, it's not just that the number is divisible by 100 and 4, it's that the number is divisible by 400. 200 is divisible by 100 and 4, but isn't a leap year.

To say that a number is divisible by 100 and 4, or 100 or 4, is that same as saying a number is divisible by 4.

That is: (A ^ B) v (A ^ !B) = A ^ (B v !B) = A.

This is the same logic that makes all those ads so hilarious: "You can make up to $50,000 a year, or more!" So I guess the only amount you can't make is $50,000!

Sorry, anal logician here ;)

-Plast


All times are GMT +5.5. The time now is 20:53.