作者 海洋饼干叔叔
单位 重庆大学
设计符合下述要求的日期类(Date),使得下述代码可以正常运行。
裁判测试程序样例:
#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
//请在此处定义Date类
int main()
{
int year=2000,month=1,day=1;
cin >> year >> month >> day;
Date d(year,month,day);
cout << "Date: " << d.toText() << ", Next Day: " << d.nextDay().toText()
<< ", Prev Day: " << d.prevDay().toText();
return 0;
}
输入样例:
2000 3 1
输出样例:
Date: 2000-3-1, Next Day: 2000-3-2, Prev Day: 2000-2-29
提示:需要注意闰年,闰年2月有29天,平年28天。
闰年判定函数:
bool isLeapYear(int year){
//四年一闰,百年不闰,四百年又闰
if (year%400==0)
return true;
else if (year%100==0)
return false;
else if (year%4==0)
return true;
else
return false;
}
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
参考示例:
bool isLeapYear(int year){
if(year%400==0) return true;
else if(year%100==0)
return false;
else if(year%4==0)
return true;
return false;
}
class Date{
private:
int year,month,day;
public:
Date(int y,int m,int d):year(y),month(m),day(d){}
string toText(){
return to_string(year)+"-"+to_string(month)+"-"+to_string(day);
}
Date nextDay(){
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int y=year,m=month,d=day+1;
int maxDay =mon[m-1];
if(m==2 && isLeapYear(y))
maxDay=29;
if(d>maxDay){
d=1;m++;
}
if(m>12){
m=1;y++;
}
return Date(y,m,d);
}
Date prevDay(){
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int y=year,m=month,d=day-1;
if(d<1){
m–;
if(m<1){
m=12;y–;
}
int maxDay=mon[m-1];
if(m==2 && isLeapYear(y)) maxDay=29;
d = maxDay;
}
return Date(y,m,d);
}
};
网硕互联帮助中心





评论前必须登录!
注册