// 给定一个天数,查询该天之后的日期
//例如
//当前日期是 2008 11 10 则5050天后是 2022 9 8
#include <iostream>
using namespace std;
class DAY
{
private:
int y;
int m;
int d;
int days[12];
public:
DAY()
{
cout<<"请输入当前日期"<<endl;
cout <<"year"<<endl;
cin >> y;
cout << "mouth"<<endl;
cin >>m;
cout << "day"<<endl;
cin >> d;
int i;
for( i = 1 ; i <= 12 ; i++)
{
switch(i)
{
case 2:
days[i-1] = isLeapYear() ? 29:28; //设置2月天数
break;
case 4:
case 6:
case 9:
case 11:
days[i-1] = 30;
break;
default :
days[i-1] = 31;
}
}
}
void show()
{
cout <<"year:"<<y<<endl;
cout <<"mouth:"<<m<<endl;
cout <<"day:"<<d<<endl;
}
int judge_day(int mouth)
{
return days[mouth-1];
}
void calculate(int increase)
{
if(d + increase <= days[m-1])
d += increase;
else
{
increase -= days[m-1] - d;
m++;
if(m>12)
{
//if m is greater than 12 , and increase is less than days[m-1]
//,then the following while statement will not be executed,
//so must reset m and year++
m = 1;
y++;
}
while(increase -days[m-1] >0)
{
increase -= days[m-1];
m++;
if(m > 12)
{
y++;
m = 1;
days[1] = isLeapYear() ? 29 : 28;
}
}
d = increase;
}
}
bool isLeapYear()
{
return ( y%4 == 0 && y%100 != 0 ) || (y%400 == 0);
}
};
int main()
{
DAY test;
int increase;
test.show();
cout <<"请输入天数,以查询该天之后的日期"<<endl;
cin >> increase;
test.calculate(increase);
cout <<"\n"<<increase<<"天以后是:"<<endl;
test.show();
return 0;
}
评论