Skip to content

Commit 45b04d7

Browse files
committed
5.9
1 parent f2a5083 commit 45b04d7

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#include <stdio.h>
2+
3+
char a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
4+
char b[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
5+
6+
static char *daytab[2] = {a, b};
7+
/*
8+
static char *daytab[2] = {
9+
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
10+
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
11+
};
12+
*/
13+
14+
char *name[] = {"Jan", "Feb"};
15+
char n0[][10] = { {"Jan"}, {"Feb"} };
16+
char n1[][10] = { "Jan", "Feb" };
17+
//char *n2[] = { {"Jan"}, {"Feb"} };
18+
19+
int main()
20+
{
21+
int day_of_year(int, int, int);
22+
void month_day(int, int, int*, int*);
23+
24+
int day = day_of_year(2018, 8, 19);
25+
printf("%d\n", day);
26+
27+
day = day_of_year(2018, 13, 19);
28+
printf("%d\n", day);
29+
30+
day = day_of_year(2018, 12, 39);
31+
printf("%d\n", day);
32+
33+
day = day_of_year(2018, 12, 0);
34+
printf("%d\n", day);
35+
36+
int month;
37+
month_day(2018, 231, &month, &day);
38+
printf("%d, %d\n", month, day);
39+
40+
month_day(2018, -1, &month, &day);
41+
printf("%d, %d\n", month, day);
42+
43+
month_day(2018, 1234, &month, &day);
44+
printf("%d, %d\n", month, day);
45+
46+
month_day(2018, 365, &month, &day);
47+
printf("%d, %d\n", month, day);
48+
49+
month_day(2018, 366, &month, &day);
50+
printf("%d, %d\n", month, day);
51+
52+
month_day(2016, 366, &month, &day);
53+
printf("%d, %d\n", month, day);
54+
55+
return 0;
56+
}
57+
58+
int day_of_year(int year, int month, int day)
59+
{
60+
int i, leap;
61+
if (month < 1 || month > 12) {
62+
printf("error: invalid month: %d\n", month);
63+
return -1;
64+
}
65+
66+
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
67+
68+
if (day < 1 || day > daytab[leap][month]) {
69+
printf("error: invalid day: %d\n", day);
70+
return -1;
71+
}
72+
73+
char *p = daytab[leap] + 1;
74+
75+
for (i = 1; i < month; i++)
76+
day += *p++;
77+
return day;
78+
}
79+
80+
void month_day(int year, int yearday, int *pmonth, int *pday)
81+
{
82+
int i, leap;
83+
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
84+
if (yearday < 1) {
85+
printf("error: invalid yearday: %d\n", yearday);
86+
return;
87+
} else if (leap == 1 && yearday > 366) {
88+
printf("error: invalid yearday: %d\n", yearday);
89+
return;
90+
} else if (leap == 0 && yearday > 365) {
91+
printf("error: invalid yearday: %d\n", yearday);
92+
return;
93+
}
94+
95+
char *p = daytab[leap] + 1;
96+
97+
for (i = 1; yearday > *p; i++)
98+
yearday -= *p++;
99+
*pmonth = i;
100+
*pday = yearday;
101+
}
102+

0 commit comments

Comments
 (0)