方法一:一天天的增减,但效率较低
#include<iostream>
using namespace std;
class CDate
{
public:
int n;
char BA;
CDate(int a=2018,int b=1,int c=1) //析构
{
year=a;
month=b;
day=c;
}
void print()
{
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
bool leapYear() //判断闰年
{
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
else
return 0;
}
void AddOneDay(){ //加一天
if(++day>GetDays()){
day=1;
if(++month>12){
month=1;
year++;
}
}
n--;
}
void SubOneDay(){ //减一天
if(--day==0){
if(--month==0){
month=12;
year--;
}
day=GetDays();
}
n--;
}
int GetDays(){
int days=0;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days=31;break;
case 4:
case 6:
case 9:
case 11: days=30;break;
case 2: if(leapYear())days=29;
else days=28;
}
return days;
}
private:
int year;
int month;
int day;
};
int main()
{
CDate d(2018,11,9); //设置初始日期
cout<<"Please input B(before) or A(after)?"<<endl;
cin>>d.BA; //用于判断是加还是减
while(d.BA!='A'&&d.BA!='B')
{
cout<<"format error!Please input again"<<endl;
cin>>d.BA;
}
cout<<"Please input days:"<<endl;
cin>>d.n; //用于统计增减的天数
while(d.n!=0)
{
if(d.BA=='A')
d.AddOneDay();
else
d.SubOneDay();
}
d.print();
}
方法二:对于方法一进行改进,按照年月日依次减少
#include<iostream>
using namespace std;
class CDate
{
public:
int n;
char BA;
CDate(int a=2018,int b=1,int c=1) //析构
{
year=a;
month=b;
day=c;
}
void print()
{
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
bool leapYear() //判断闰年
{
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
else
return 0;
}
void SubDays(){
while(n>365) //一年一年的减
{
if(leapYear())
{
year-=1;
n-=366;
}
else
{
year-=1;
n-=365;
}
}
if(n==365&&leapYear()==0)
{
year-=1;
n=0;
}
while(n>GetDays()) //一个月一个月的减
{
n-=GetDays();
month-=1;
if(month==0)
month=12;
}
if(day>n)
day-=n;
else
{
month--;
day=GetDays()-(n-day);
}
}
void AddDays(){
while(n>365) //一年一年的加
{
if(leapYear())
{
year+=1;
n-=366;
}
else
{
year+=1;
n-=365;
}
}
if(n==365&&leapYear()==0)
{
year+=1;
n=0;
}
while(n>GetDays()) //一个月一个月的加
{
n-=GetDays();
month+=1;
if(month==13)
month=1;
}
if(day+n<=GetDays())
day+=n;
else
{
day=n-(GetDays()-day);
month++;
}
}
int GetDays(){
int days=0;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days=31;break;
case 4:
case 6:
case 9:
case 11: days=30;break;
case 2: if(leapYear())days=29;
else days=28;
}
return days;
}
private:
int year;
int month;
int day;
};
int main()
{
CDate d(2018,11,9); //设置初始日期
cout<<"Please input B(before) or A(after)?"<<endl;
cin>>d.BA; //用于判断是加还是减
while(d.BA!='A'&&d.BA!='B')
{
cout<<"format error!Please input again"<<endl;
cin>>d.BA;
}
cout<<"Please input days:"<<endl;
cin>>d.n; //用于统计增减的天数
if(d.BA=='A')
d.AddDays();
else
d.SubDays();
d.print();
}