1
// 給定一個天數,查詢該天之后的日期
2
//例如
3
//當前日期是 2008 11 10 則5050天后是 2022 9 8
4
5
#include <iostream>
6
7
using namespace std;
8
9
class DAY
10

{
11
private:
12
int y;
13
int m;
14
int d;
15
int days[12];
16
17
public:
18
DAY()
19
{
20
cout<<"請輸入當前日期"<<endl;
21
cout <<"year"<<endl;
22
cin >> y;
23
cout << "mouth"<<endl;
24
cin >>m;
25
cout << "day"<<endl;
26
cin >> d;
27
28
int i;
29
30
for( i = 1 ; i <= 12 ; i++)
31
{
32
switch(i)
33
{
34
35
case 2:
36
days[i-1] = isLeapYear() ? 29:28; //設置2月天數
37
break;
38
39
case 4:
40
case 6:
41
case 9:
42
case 11:
43
days[i-1] = 30;
44
break;
45
46
default :
47
days[i-1] = 31;
48
}
49
}
50
}
51
52
void show()
53
{
54
cout <<"year:"<<y<<endl;
55
cout <<"mouth:"<<m<<endl;
56
cout <<"day:"<<d<<endl;
57
}
58
59
int judge_day(int mouth)
60
{
61
return days[mouth-1];
62
}
63
64
void calculate(int increase)
65
{
66
if(d + increase <= days[m-1])
67
d += increase;
68
else
69
{
70
increase -= days[m-1] - d;
71
m++;
72
73
if(m>12)
74
{
75
//if m is greater than 12 , and increase is less than days[m-1]
76
//,then the following while statement will not be executed,
77
//so must reset m and year++
78
79
m = 1;
80
y++;
81
}
82
83
while(increase -days[m-1] >0)
84
{
85
increase -= days[m-1];
86
m++;
87
88
if(m > 12)
89
{
90
y++;
91
m = 1;
92
93
days[1] = isLeapYear() ? 29 : 28;
94
}
95
}
96
97
d = increase;
98
}
99
}
100
101
bool isLeapYear()
102
{
103
return ( y%4 == 0 && y%100 != 0 ) || (y%400 == 0);
104
}
105
};
106
107
int main()
108

{
109
DAY test;
110
int increase;
111
112
test.show();
113
114
cout <<"請輸入天數,以查詢該天之后的日期"<<endl;
115
cin >> increase;
116
117
test.calculate(increase);
118
cout <<"\n"<<increase<<"天以后是:"<<endl;
119
test.show();
120
121
return 0;
122
}

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

65



66

67

68

69



70

71

72

73

74



75

76

77

78

79

80

81

82

83

84



85

86

87

88

89



90

91

92

93

94

95

96

97

98

99

100

101

102



103

104

105

106

107

108



109

110

111

112

113

114

115

116

117

118

119

120

121

122
