題目描述
設計一個程式能計算一個日期加上若干天后是什么日期,
- 輸入描述:
輸入第一行表示樣例個數m,接下來m行每行四個整數分別表示年月日和累加的天數, - 輸出描述:
輸出m行,每行按yyyy-mm-dd的個數輸出,
題解
1.定義一個靜態陣列存放12個月每月對應的天數,其中2月默認為28天,若是閏年則2月為29天,
2.累加日期,若是大于當月所對應的天數,則向月進位;如果月增加到13,則另月為1,向年進位,
3.注意題目要求的輸入輸出方式,
#include<iostream>
using namespace std;
class Date
{
private:
int _year;
int _month;
int _day;
public:
int _n;
//獲取當月日期
int GetMonthDay(int year,int month){
static int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//如果是閏年:四年一閏,百年不閏;四百年又閏
if(month==2 &&((year%4==0 && year%100!=0) || (year%400==0)))
return 29;
return arr[month];
}
// +=運算子多載
Date& operator+=(int n){
_day+=n;
while(_day > GetMonthDay(_year, _month)){
_day-=GetMonthDay(_year, _month);
++_month;
if(_month==13){
++_year;
_month=1;
}
}
return *this;
}
//輸入日期
void Input(){
int year,month,day,n=0;
cin>>year>>month>>day>>n;
//判斷輸入日期是否合法
if (year >= 0 && month >= 1 && month <= 12 && day >= 1 && day <= GetMonthDay(year, month)){
_year=year;
_month=month;
_day=day;
_n=n;
}
}
//輸出
void Print(){
printf("%d-%02d-%02d\n",_year,_month,_day);
}
};
int main(){
int count=0;
int year,month,day,n=0;
cin>>count;
Date d[count];
for(int i=0;i<count;++i)
d[i].Input();
for(int j=0;j<count;++j){
d[j]+=d[j]._n;
d[j].Print();
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262464.html
標籤:其他
