-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathex5_9.c
64 lines (50 loc) · 1.32 KB
/
ex5_9.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
static int daytab[2][12] =
{
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
int day_of_year(int year, int month, int day)
{
// you could put error checking here
// I'm not going to :)
int (*leapptr)[12], *ndays, leap, i;
// not an array of 12 pointers but a pointer to an array of 12 integers
leapptr = daytab;
leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
if (leap)
leapptr++;
ndays = *leapptr;
for (i = 0; i < month-1; ++i) {
day += *ndays++;
}
return day;
}
void month_day(int year, int yearday, int *month, int *day)
{
int (*leapptr)[12], *ndays, leap, i = 0;
// not an array of 12 pointers but a pointer to an array of 12 integers
leapptr = daytab;
leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
if (leap)
leapptr++;
ndays = *leapptr;
while ((yearday - *(ndays + i)) > 0) {
yearday -= *(ndays + i);
i++;
}
*month = i+1;
*day = yearday;
}
int main()
{
int m1, d1, m2, d2;
printf("%d\n", day_of_year(2019, 3, 1));
printf("%d\n", day_of_year(2020, 3, 1));
printf("%d\n", day_of_year(2020, 4, 16));
month_day(1988, 60, &m1, &d1);
month_day(2020, 107, &m2, &d2);
printf("%d %d\n", m1, d1);
printf("%d %d\n", m2, d2);
return 0;
}