問題描述 :
寫一個函數,傳入年月日,計算它的第二天,並返回該日期。由用戶輸入年月日和一個n值,使用前述函數,計算該日期加n天的日期爲多少。
輸入說明 :
輸入year,month,day和n共4個正整數,以空格分隔。n的值不超過2000。
輸出說明 :
輸出計算得到的結果年月日共3個正整數,整數之間以一個空格分隔,行首與行尾無多餘空格。
輸入範例 :
2000 1 1 366
輸出範例 :
2001 1 1
曾經寫過類似,就直接改了改
c++源碼:
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
int MonthDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class Date
{ public:
Date(int a=3,int b=3,int c=2018);//初始日期是2018.3.3,構造函數 ;
void assign(int a,int b,int c);//賦值函數 ;
void display();//輸出函數;
bool leap_year();//判斷是否是閏年(布爾);
void increment(int n);//當前日期n天后的日期;
int accumulate(Date& t);
private:
int day;
int month;
int year;
};
int Date::accumulate(Date& t)
{ int sum,n1,n2;
n1=MonthDays[month]-day;
while(t.year>year)// 2個日期“年”是否相同
{ if(leap_year()==0)
MonthDays[2]=28;
else
MonthDays[2]=29;
for(int i=month;i<12;i++)
{ n1+=MonthDays[i+1];
}
year+=1;
month=0;
}
if(leap_year()==0) //在同一年;
MonthDays[2]=28;
else
MonthDays[2]=29;
if(t.month>month)//不在同一個月;
{
for(int i=month;i<t.month-1;i++)
{ n1+=MonthDays[i+1];
}
n1+=t.day;
}
else
n1=t.day-day;
return n1;
}
Date::Date(int a,int b,int c)//構造函數;
{ day=a;
month=b;
year=c;
}
void Date::assign(int a,int b,int c)//賦值函數;
{ day=a;
month=b;
year=c;
}
void Date::display()//輸出函數;
{ cout<<year<<" "<<month<<" "<<day<<endl;
}
bool Date::leap_year() //函數判斷是否是閏年;
{ return(year%4==0&&year%100!=0)||(year%400==0);//閏年的判斷條件;
}
void Date::increment(int n) //函數,計算n天后的日期 ;
{
while(n>=31)//加的天數大於一個月 ;
{
if(leap_year()==0)//不是閏年 ;
{ MonthDays[2]=28;
n=n-MonthDays[month];
month+=1;
if(month>12)
{month=month-12;
year+=1;}
}
else//是閏年 ;
{if(month<3)
MonthDays[2]=29;
n=n-MonthDays[month];
month+=1;
if(month>12)
{month=month-12;
year+=1;}
}
}
if(leap_year()==0)
{ MonthDays[2]=28;
day=day+n;
if(day>MonthDays[month])
{day=day-MonthDays[month];
month+=1;
if(month>12)
{month=month-12;
year+=1;}
}
}
else
{ if(month<3)
MonthDays[2]=29;
day=day+n;
if(day>MonthDays[month])
{day=day-MonthDays[month];
month+=1;
if(month>12)
{month=month-12;
year+=1;}
}
} }
int main()
{
int n,a1,b1,c1,a2,b2,c2,a;
Date date3;
while(cin>>a1>>b1>>c1>>n)
{
//cin>>a1>>b1>>c1;//輸入一個日期;
date3.assign(c1,b1,a1);
date3.increment(n);//計算該天數之後的日期;
date3.display();//顯示該天數之後的日期;
}
return 0;
}