53 求n天后的日期

問題描述 :

寫一個函數,傳入年月日,計算它的第二天,並返回該日期。由用戶輸入年月日和一個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;  

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章