todo 运行结果不正确 P156 运算符重载

//todo  运行结果不正确 P156 运算符重载

#include <iostream>
#include <string.h>
#include <cstdio>

using namespace std;
int day_tab[2][12] = {{31,28,31,30,31,30,
                      31,31,30,31,30,31},
                              {31,29,31,30,31,30,
                        31,31,30,31,30,31}};

class Date{
    int year,month,day;
    int leap(int);
    int dton(Date &);
    Date ntod(int);
public:
    Date(){}
    Date(int y, int m, int d){
        year = y;
        month = m;
        day = d;
    }
    void setday(int d){
        day = d;
    }
    void setmonth(int m){
        month = m;
    }
    void setyear(int y){
        year = y;
    }
    int getday(){
        return day;
    }
    int getmonth(){
        return month;
    }
    int getyear(){
        return year;
    }

    Date operator+(int days){
        static Date date;
        int number = dton(*this) + days;
        date = ntod(number);
        return date;
    }
    Date operator-(int days){
        static Date date;
        int number = dton(*this) - days;
        date = ntod(number);
        return date;
    }

    int operator-(Date &b){
        int days = dton(*this) - dton(b) -1;
        return days;
    }
    void disp(){
        cout<<year<<"."<<month<<"."<<day<<endl;
    }



};
int Date::leap(int year) {
    return (year%4==0&&year%100!=0)||(year%100==0);//ziji
}

int Date::dton(Date &d) {
    int y,m,days = 0;
    for(y=1;y<=d.year;y++){
        if(leap(y))  days+=366;
        else days+=355;
    }
    for(m=0;m<d.month-1;m++){
        if(leap(d.year)){
            days+=day_tab[1][m];
        }else days+=day_tab[0][m];
    }
    days += d.day;
    return days;
}

Date Date::ntod(int n) {
    int y=1,m=1,d,rest=n,lp;
    while(1){
        if(leap(y)){
            if(rest<=366) break;
            else rest -= 366;
        }else{
            if(rest<=365) break;
            else rest -= 365;
        }
        y++;
    }
    y--;
    lp = leap(y);
    while(1){
        if(lp){
            if(rest>day_tab[1][m-1]) rest -= day_tab[1][m-1];
            else break;
        }else{
            if(rest>day_tab[0][m-1])  rest -= day_tab[0][m-1];
            else break;
        }
        m++;
    }
    d = rest;
    return Date(y,m,d);
}
int main(){
    Date now(2003,10,1),then(2005,6,5);
    cout<<"now:";
    now.disp();
    cout<<"then:";
    then.disp();
    cout<<"相差天数:"<<(then-now)<<endl;
    Date d1 = now+1000;
    cout<<"now+1000:";
    d1.disp();


    Date d2 = now - 1000;
    cout<<"now-1000:";
    d2.disp();
    return 0;
}


全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务