一道c++编程问题,求大神打出代码,悬赏全给你

2024-11-02 14:25:02
推荐回答(1个)
回答1:

写了1个小时,哈哈哈哈,代码仅供参考~需要注意这里,0年1月1日为第一天,满足题意“”将指定日期转换成从0年O月O日起的天数“”,里面有一些C ++11的特性(右值引用需要提前了解一下哈)~

#include 
using namespace std;
class Date{

public:
Date(int y = 0, int m = 0, int d = 0) :m_year(y), m_month(m), m_day(d){};
int getYear(){
return m_year;
}
int getMonth(){
return m_month;
}
int getDay(){
return m_day;
}
Date operator+(int days){
//返回某日期加上天数得到的日期
int firstdays = dton(*this);
return ntod(firstdays + days);
}
Date operator-(int days){
//返回某日期减去天数得到的日期
int firstdays = dton(*this);
if(firstdays - days > 0){
return ntod(firstdays - days);
}
else{
return Date(0,0,0);//对于不合法的天数都返回为000; 
}
}
int operator-(Date&b){
//返回两日期相差的天数
int firstdays = dton(*this);
int seconddays = dton(b);
return firstdays - seconddays;
}
friend ostream& operator << (ostream &out, Date &a){
cout << a.m_year << " 年" << a.m_month << " 月" << a.m_day << " 日";
return out;
}
friend ostream& operator << (ostream &out, Date &&a){
cout << a.m_year << " 年" << a.m_month << " 月" << a.m_day << " 日";
return out;
}
protected:
bool leap(int year){
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
return true;
return false;
}
int dton(Date &b){
//将指定日期转换成从0年O月O日起的天数
int sum = 0;
for (int i = 0; i < b.m_year; i++){
if (leap(i)){
sum += 366;
}
else
sum += 365;
}

bool flag = leap(b.m_year);
for (int i = 0; i < b.m_month - 1; i++)
sum += day_tab[flag][i];
sum += b.m_day;
return sum;
}
Date ntod(int day){
//将指定的0年1月1日起的天数转换成对应的日期
int year = 0;
while (day > 365){
if (leap(year))
day -= 366;
else
day -= 365;
year++;
}
int i = 0;
bool flag = leap(year);
int monthday = 0;
for (i = 0; i < 12 && monthday <= day; i++){
monthday += day_tab[flag][i];
}
monthday -= day_tab[flag][i - 1];
i--;
Date *a = NULL;
if(day -monthday !=0)
a = new Date(year, i + 1, day - monthday);
else{
if (i != 0)
a = new Date(year, i, day_tab[flag][i]);
else
a = new Date(year-1, 12, 31);
}
return *a;
}
int day_tab[2][12] = { // day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年
{ 31, 28, 31, 30, 3l, 30, 3l, 3l, 30, 31, 30, 31 },
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, }
};
private:
int m_year;
int m_month;
int m_day;
};
int main(){
Date a(0, 12, 31);
cout << a << endl;
cout << a + 1 << endl;
Date b = a-2;
cout<}