C
celsius
Hi folks,
Al Bowers wrote this program on comp.lang.c
Date: 2001-07-09 13:41:58 PST
#include <stdio.h>
int isleap (unsigned yr);
static unsigned months_to_days (unsigned month);
static long years_to_days (unsigned yr);
long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day);
int main(void) {
unsigned y1 = 2000, m1 = 2, d1 = 1, /* represent 01FEB2000 */
y2 = 2000, m2 = 3,d2 = 1; /* represent 01MAR2000 */
long date1,date2;
date1 = ymd_to_scalar(y1,m1,d1);
date2 = ymd_to_scalar(y2,m2,d2);
printf("There are %ld days\n",date2-date1);
printf("It %s a leap year\n",(isleap(y1))?"is":"is not");
return 0;
}
int isleap (unsigned yr)
{ return yr % 400 == 0 || (yr % 4 == 0 && yr % 100 != 0);}
static unsigned months_to_days (unsigned month)
{ return (month * 3057 - 3007) / 100; }
static long years_to_days (unsigned yr)
{return yr * 365L + yr / 4 - yr / 100 + yr / 400;}
long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day)
{
long scalar;
scalar = day + months_to_days(mo);
if ( mo > 2 ) /* adjust if past February */
scalar -= isleap(yr) ? 1 : 2;
yr--;
scalar += years_to_days(yr);
return scalar;
}
can anybody explain the logic or formula applied in functions:-
static unsigned months_to_days (unsigned month);
static long years_to_days (unsigned yr):
if want to know about the formula which is used here
Al Bowers wrote this program on comp.lang.c
Date: 2001-07-09 13:41:58 PST
#include <stdio.h>
int isleap (unsigned yr);
static unsigned months_to_days (unsigned month);
static long years_to_days (unsigned yr);
long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day);
int main(void) {
unsigned y1 = 2000, m1 = 2, d1 = 1, /* represent 01FEB2000 */
y2 = 2000, m2 = 3,d2 = 1; /* represent 01MAR2000 */
long date1,date2;
date1 = ymd_to_scalar(y1,m1,d1);
date2 = ymd_to_scalar(y2,m2,d2);
printf("There are %ld days\n",date2-date1);
printf("It %s a leap year\n",(isleap(y1))?"is":"is not");
return 0;
}
int isleap (unsigned yr)
{ return yr % 400 == 0 || (yr % 4 == 0 && yr % 100 != 0);}
static unsigned months_to_days (unsigned month)
{ return (month * 3057 - 3007) / 100; }
static long years_to_days (unsigned yr)
{return yr * 365L + yr / 4 - yr / 100 + yr / 400;}
long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day)
{
long scalar;
scalar = day + months_to_days(mo);
if ( mo > 2 ) /* adjust if past February */
scalar -= isleap(yr) ? 1 : 2;
yr--;
scalar += years_to_days(yr);
return scalar;
}
can anybody explain the logic or formula applied in functions:-
static unsigned months_to_days (unsigned month);
static long years_to_days (unsigned yr):
if want to know about the formula which is used here