回答編集履歴
3
コード修正
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
int getDays(date_t dt) {
|
32
32
|
|
33
|
-
static const int mdays[] = {
|
33
|
+
static const int mdays_common[] = {
|
34
34
|
|
35
35
|
0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
|
36
36
|
|
@@ -42,19 +42,13 @@
|
|
42
42
|
|
43
43
|
};
|
44
44
|
|
45
|
-
int
|
45
|
+
const int* mdays = isLeapYear(dt.year) ? mdays_leap : mdays_common;
|
46
46
|
|
47
|
-
|
47
|
+
int yprev = dt.year - 1,
|
48
48
|
|
49
|
-
|
49
|
+
ydays = yprev * 365 + yprev / 4 - yprev / 100 + yprev / 400;
|
50
50
|
|
51
|
-
return ydays + mdays_leap[dt.month - 1] + dt.day;
|
52
|
-
|
53
|
-
} else {
|
54
|
-
|
55
|
-
|
51
|
+
return ydays + mdays[dt.month - 1] + dt.day;
|
56
|
-
|
57
|
-
}
|
58
52
|
|
59
53
|
}
|
60
54
|
|
2
コード修正
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
// 西暦1年1月1日からの日数を返す
|
29
|
+
// 西暦1年1月1日からの経過日数を返す
|
30
30
|
|
31
31
|
int getDays(date_t dt) {
|
32
32
|
|
@@ -104,19 +104,13 @@
|
|
104
104
|
|
105
105
|
for (int i = 0; i < len; i++) {
|
106
106
|
|
107
|
-
int daysFrom = getDays(dtFrom[i]),
|
108
|
-
|
109
|
-
daysTo = getDays(dtTo[i]);
|
110
|
-
|
111
|
-
|
112
|
-
|
113
107
|
printf("%4d/%2d/%2d - %4d/%2d/%2d %6d days\n",
|
114
108
|
|
115
109
|
dtFrom[i].year, dtFrom[i].month, dtFrom[i].day,
|
116
110
|
|
117
111
|
dtTo[i].year, dtTo[i].month, dtTo[i].day,
|
118
112
|
|
119
|
-
|
113
|
+
getDays(dtTo[i]) - getDays(dtFrom[i]) + 1 );
|
120
114
|
|
121
115
|
}
|
122
116
|
|
1
コード修正
test
CHANGED
@@ -13,6 +13,16 @@
|
|
13
13
|
int year, month, day;
|
14
14
|
|
15
15
|
} date_t;
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
// うるう年なら真を返す
|
20
|
+
|
21
|
+
int isLeapYear(int year) {
|
22
|
+
|
23
|
+
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
|
24
|
+
|
25
|
+
}
|
16
26
|
|
17
27
|
|
18
28
|
|
@@ -32,21 +42,19 @@
|
|
32
42
|
|
33
43
|
};
|
34
44
|
|
35
|
-
int prev = dt.year - 1,
|
45
|
+
int prev = dt.year - 1,
|
36
46
|
|
37
47
|
ydays = prev * 365 + prev / 4 - prev / 100 + prev / 400;
|
38
48
|
|
39
|
-
if (
|
49
|
+
if (isLeapYear(dt.year)) {
|
40
50
|
|
41
|
-
|
51
|
+
return ydays + mdays_leap[dt.month - 1] + dt.day;
|
42
52
|
|
43
53
|
} else {
|
44
54
|
|
45
|
-
|
55
|
+
return ydays + mdays[dt.month - 1] + dt.day;
|
46
56
|
|
47
57
|
}
|
48
|
-
|
49
|
-
return days;
|
50
58
|
|
51
59
|
}
|
52
60
|
|
@@ -96,9 +104,11 @@
|
|
96
104
|
|
97
105
|
for (int i = 0; i < len; i++) {
|
98
106
|
|
99
|
-
int daysFrom = getDays(dtFrom[i])
|
107
|
+
int daysFrom = getDays(dtFrom[i]),
|
100
108
|
|
101
|
-
|
109
|
+
daysTo = getDays(dtTo[i]);
|
110
|
+
|
111
|
+
|
102
112
|
|
103
113
|
printf("%4d/%2d/%2d - %4d/%2d/%2d %6d days\n",
|
104
114
|
|