summaryrefslogtreecommitdiffstats
path: root/5/9.c
diff options
context:
space:
mode:
Diffstat (limited to '5/9.c')
-rw-r--r--5/9.c36
1 files changed, 3 insertions, 33 deletions
diff --git a/5/9.c b/5/9.c
index 5bcd213..62459fd 100644
--- a/5/9.c
+++ b/5/9.c
@@ -1,5 +1,3 @@
-#include <stdio.h>
-
static char daytab[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
@@ -8,26 +6,10 @@ static char daytab[2][13] = {
int day_of_year(int year, int month, int day) {
int i, leap;
- // leap year logic is only valid if this is true.
- if (year < 1752) {
- printf("error: invalid year\n");
- return -1;
- }
-
- if (month < 1 || month > 12) {
- printf("error: invalid month\n");
- return -1;
- }
-
- if (day < 1) {
- printf("error: invalid day\n");
- return -1;
- }
-
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
for (i = 1; i < month; i++)
- day += daytab[leap][i];
+ day += *(*(daytab + leap) + i);
return day;
}
@@ -36,22 +18,10 @@ int day_of_year(int year, int month, int day) {
void month_day(int year, int yearday, int *pmonth, int *pday) {
int i, leap;
- if (year < 0) {
- *pmonth = *pday = -1;
- printf("error: invalid year\n");
- return;
- }
-
- if (yearday < 1) {
- *pmonth = *pday = -1;
- printf("error: invalid yearday\n");
- return;
- }
-
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
- for (i = 1; yearday > daytab[leap][i]; i++)
- yearday -= daytab[leap][i];
+ for (i = 1; yearday > *(*(daytab + leap) + i); i++)
+ yearday -= *(*(daytab + leap) + i);
*pmonth = i;
*pday = yearday;