描述
给定日期类的声明
class Date{
public:
Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day
int get_month() const; //返回month
int get_year() const; // 返回year
static void set_default(int, int, int);
static int get_default_day(); //返回缺省day
static int get_default_month(); //返回缺省month
static int get_default_year(); //返回缺省year
Date & add_year(int n); //加n年
Date & add_month(int n); //加n月,考虑超过12月,考虑闰年
Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年
private:
int day, month, year;
static Date default_date; //初始化为 1901年1月1日
};
实现这个类并用以下的main函数测试它。
int main(){
char type[110];
int day,mon,year;
int addday,addmon,addyear;
while(cin>>type){
if(strcmp(type,"Date") == 0){
cin>>day>>mon>>year;
Date mydate(day,mon,year);
cin>>addday>>addmon>>addyear;
mydate.add_day(addday).add_month(addmon).add_year(addyear);
cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;
}else if(strcmp(type,"defalutDate") == 0){
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}else if(strcmp(type,"setdefaultDate") == 0){
cin>>day>>mon>>year;
Date::set_default(day,mon,year);
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
}
return 0;
}
输入
多组输入,每一组输入以一个 type来判断输入类型,如果是'Date',那么就输入当前设置的日期以及要加的天数;如果是'defaultDate',那么就是直接输出默认日期;如果是'setdefaultDate',那么就输入要设置的默认日期。
输出
输出计算后得到的日期。
#include <iostream>
using namespace std;
int maxd(int y, int m)
{
switch (m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 2:
if (y % 4 != 0)
return 28;
if (y % 100 == 0 && y % 400 != 0)
return 28;
return 29;
default:
return 30;
}
}
class Date{
private:
int day, month, year;
static Date default_date; //初始化为 1901年1月1日
public:
Date(){ day=month=year=0; }
Date(int d, int m, int y); //构造函数
int get_day() const; // 返回day
int get_month() const; //返回month
int get_year() const; // 返回year
static void set_default(int, int, int){Date::default_date = Date(1, 1, 1901);}
static int get_default_day() {return Date::default_date.get_day();} //返回缺省day
static int get_default_month(){return Date::default_date.get_month();} //返回缺省month
static int get_default_year(){return Date::default_date.get_year();} //返回缺省year
Date& add_year(int n); //加n年
Date& add_month(int n); //加n月,考虑超过12月,考虑闰年
Date& add_day(int n); //加n天,考虑进位月和年,考虑闰年
};
Date::Date(int d, int m, int y)
{
day = d;
month = m;
year = y;
}
int Date::get_day() const
{
return day;
}
int Date::get_month() const
{
return month;
}
int Date::get_year() const
{
return year;
}
Date& Date::add_year(int n)
{
year += n;
return *this;
}
Date& Date::add_month(int n)
{
if (month + n <= 12)
{
month += n;
return *this;
}
add_year(1);
n = n - 12 + month;
month = 1;
while (n >= 12)
{
add_year(1);
n -= 12;
}
month += n;
return *this;
}
Date& Date::add_day(int n)
{
if (day + n <= maxd(year, month))
{
day += n;
return *this;
}
add_month(1);
n = n - (maxd(year, month), day) + day;
day = 1;
while (n >= maxd(year, month))
{
add_month(1);
n -= maxd(year, month);
}
day += n;
return *this;
}
int main(){
char type[110];
int day,mon,year;
int addday,addmon,addyear;
while(cin>>type){
if(strcmp(type,"Date") == 0){
cin>>day>>mon>>year;
Date mydate(day,mon,year);
cin>>addday>>addmon>>addyear;
mydate.add_day(addday).add_month(addmon).add_year(addyear);
cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;
}else if(strcmp(type,"defalutDate") == 0){
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}else if(strcmp(type,"setdefaultDate") == 0){
cin>>day>>mon>>year;
Date::set_default(day,mon,year);
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
}
return 0;
}
#include
using namespace std;
class Date {
private:
int day, month, year;
static Date default_date; //初始化为 1901年1月1日
public:
Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day
int get_month() const; //返回month
int get_year() const; // 返回year
static void set_default(int , int , int);
static int get_default_day(); //返回缺省day
static int get_default_month(); //返回缺省month
static int get_default_year(); //返回缺省year
Date & add_year(int n); //加n年
Date & add_month(int n); //加n月,考虑超过12月,考虑闰年
Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年
};
Date::Date(int d, int m, int y) //构造函数
{
if(d!=0 && m != 0 && y != 0)
day = d;
month = m;
year = y;
}
int Date::get_day() const { return day; } // 返回day
int Date::get_month() const { return month; } //返回month
int Date::get_year() const { return year; } // 返回
Date Date::default_date(1,1,1901);
void Date::set_default(int x, int y, int z)
{
Date::default_date = Date(x,y,z);
}
int Date::get_default_day()//返回缺省day
{
return default_date.get_day();
}
int Date::get_default_month() //返回缺省month
{
return default_date.get_month();
}
int Date::get_default_year()//返回缺省year
{
return default_date.get_year();
}
Date &Date::add_year(int n) //加n年
{
this->year += n;
return *this;
}
Date & Date::add_month(int n) //加n月,考虑超过12月,考虑闰年
{
month += n;
while (month > 12)
{
/*if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
{
this->year += 1;
this->month -= 13;
}
else
{
this->year += 1;
this->month -= 12;
}*/
this->year += 1;
this->month -= 12;
}
return *this;
}
int PerMonDay(int yy, int mm)
{
switch (mm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
if((yy%100 != 0 && yy%4 == 0) ||(yy%400 == 0))
return 29;
else
return 28;
}
}
Date &Date::add_day(int n) //加n天,考虑进位月和年,考虑闰年
{
day += n;
while(day > PerMonDay(year,month))
{
day -= PerMonDay(year,month);
Date::add_month(1);
}
return *this;
}
//实现这个类并用以下的main函数测试它。
int main() {
string type;
while (cin >> type) {
if (type == "Date") {
int day, mon, year;
cin >> day >> mon >> year;
Date mydate(day, mon, year);
int addday, addmon, addyear;
cin >> addday >> addmon >> addyear;
mydate.add_day(addday).add_month(addmon).add_year(addyear);
cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;
}
else if (type == "defaultDate") {
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
else if (type == "setdefaultDate") {
int day, mon, year;
cin >> day >> mon >> year;
Date::set_default(day, mon, year);
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
}
return 0;
}
上面这个有个问题,但是oj系统过了,可能是样例错误吧,2008 1 30 + 0 1 0 = 2008 2 30 显然不对,所以改进后的
#include
using namespace std;
class Date {
private:
int day, month, year;
static Date default_date; //初始化为 1901年1月1日
public:
Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day
int get_month() const; //返回month
int get_year() const; // 返回year
static void set_default(int , int , int);
static int get_default_day(); //返回缺省day
static int get_default_month(); //返回缺省month
static int get_default_year(); //返回缺省year
Date & add_year(int n); //加n年
Date & add_month(int n); //加n月,考虑超过12月,考虑闰年
Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年
};
Date::Date(int d, int m, int y) //构造函数
{
if(d!=0 && m != 0 && y != 0)
day = d;
month = m;
year = y;
}
int Date::get_day() const { return day; } // 返回day
int Date::get_month() const { return month; } //返回month
int Date::get_year() const { return year; } // 返回
Date Date::default_date(1,1,1901);
void Date::set_default(int x, int y, int z)
{
Date::default_date = Date(x,y,z);
}
int Date::get_default_day()//返回缺省day
{
return default_date.get_day();
}
int Date::get_default_month() //返回缺省month
{
return default_date.get_month();
}
int Date::get_default_year()//返回缺省year
{
return default_date.get_year();
}
Date &Date::add_year(int n) //加n年
{
this->year += n;
return *this;
}
int PerMonDay(int yy, int mm);
Date & Date::add_month(int n) //加n月,考虑超过12月,考虑闰年
{
month += n;
while (month > 12)
{
this->year += 1;
this->month -= 12;
}
if((day-PerMonDay(year,month))>0)
{
day -= PerMonDay(year,month);
month += 1;
}
return *this;
}
int PerMonDay(int yy, int mm)
{
switch (mm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
if((yy%100 != 0 && yy%4 == 0) ||(yy%400 == 0))
return 29;
else
return 28;
}
}
Date &Date::add_day(int n) //加n天,考虑进位月和年,考虑闰年
{
day += n;
while(day > PerMonDay(year,month))
{
day -= PerMonDay(year,month);
Date::add_month(1);
}
return *this;
}
//实现这个类并用以下的main函数测试它。
int main() {
string type;
while (cin >> type) {
if (type == "Date") {
int day, mon, year;
cin >> day >> mon >> year;
Date mydate(day, mon, year);
int addday, addmon, addyear;
cin >> addday >> addmon >> addyear;
mydate.add_day(addday).add_month(addmon).add_year(addyear);
cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;
}
else if (type == "defaultDate") {
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
else if (type == "setdefaultDate") {
int day, mon, year;
cin >> day >> mon >> year;
Date::set_default(day, mon, year);
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
}
return 0;
}
如果再出现问题,可以@我
忽然想起来还有 29 2 2008 + 0 0 1 = 29 2 2009 的问题
#include
using namespace std;
class Date {
private:
int day, month, year;
static Date default_date; //初始化为 1901年1月1日
public:
Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day
int get_month() const; //返回month
int get_year() const; // 返回year
static void set_default(int , int , int);
static int get_default_day(); //返回缺省day
static int get_default_month(); //返回缺省month
static int get_default_year(); //返回缺省year
Date & add_year(int n); //加n年
Date & add_month(int n); //加n月,考虑超过12月,考虑闰年
Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年
};
Date::Date(int d, int m, int y) //构造函数
{
if(d!=0 && m != 0 && y != 0)
day = d;
month = m;
year = y;
}
int Date::get_day() const { return day; } // 返回day
int Date::get_month() const { return month; } //返回month
int Date::get_year() const { return year; } // 返回
Date Date::default_date(1,1,1901);
void Date::set_default(int x, int y, int z)
{
Date::default_date = Date(x,y,z);
}
int Date::get_default_day()//返回缺省day
{
return default_date.get_day();
}
int Date::get_default_month() //返回缺省month
{
return default_date.get_month();
}
int Date::get_default_year()//返回缺省year
{
return default_date.get_year();
}
int PerMonDay(int yy, int mm);
Date &Date::add_year(int n) //加n年
{
this->year += n;
if((day-PerMonDay(year,month))>0)
{
day -= PerMonDay(year,month);
month += 1;
}
return *this;
}
Date & Date::add_month(int n) //加n月,考虑超过12月,考虑闰年
{
month += n;
while (month > 12)
{
this->year += 1;
this->month -= 12;
}
if((day-PerMonDay(year,month))>0)
{
day -= PerMonDay(year,month);
month += 1;
}
return *this;
}
int PerMonDay(int yy, int mm)
{
switch (mm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
if((yy%100 != 0 && yy%4 == 0) ||(yy%400 == 0))
return 29;
else
return 28;
}
}
Date &Date::add_day(int n) //加n天,考虑进位月和年,考虑闰年
{
day += n;
while(day > PerMonDay(year,month))
{
day -= PerMonDay(year,month);
Date::add_month(1);
}
return *this;
}
//实现这个类并用以下的main函数测试它。
int main() {
string type;
while (cin >> type) {
if (type == "Date") {
int day, mon, year;
cin >> day >> mon >> year;
Date mydate(day, mon, year);
int addday, addmon, addyear;
cin >> addday >> addmon >> addyear;
mydate.add_day(addday).add_month(addmon).add_year(addyear);
cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;
}
else if (type == "defaultDate") {
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
else if (type == "setdefaultDate") {
int day, mon, year;
cin >> day >> mon >> year;
Date::set_default(day, mon, year);
cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;
}
}
return 0;
}