• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 183,  comments - 10,  trackbacks - 0
            設(shè)計(jì)一個(gè)日期類 Date,包括 年月日 三個(gè)私有數(shù)據(jù)成員。設(shè)計(jì)運(yùn)算符重載,實(shí)現(xiàn):
            ·兩個(gè)日期對(duì)象之間的“-”,求得兩個(gè)日期的相差天數(shù)。注意兩個(gè)日期不能相加。
            ·實(shí)現(xiàn)日期對(duì)象“+”“-”“+=”“-=”一個(gè)整型數(shù),求得運(yùn)算后的日期。
              1 #include <iostream>
              2 using namespace std;
              3 
              4 const int Months[2][13= {{0312831303130313130313031},
              5                            {0312931303130313130313031}};
              6 const int Years[] = {365366};
              7 
              8 inline int isLeapYear(int y)
              9 {
             10     if ((y % 4 == 0 && y % 100 != 0|| y % 400 == 0)
             11     {
             12         return 1;
             13     }
             14     else
             15     {
             16         return 0;
             17     }
             18 }
             19 
             20 class Date
             21 {
             22 private:
             23     int year;
             24     int month;
             25     int day;
             26 private:
             27     Date addDay(int d) const;
             28     Date subDay(int d) const;
             29 public:
             30     Date(int y = 0int m = 0int d = 0) : year(y), month(m), day(d) {}
             31     ~Date() {}
             32     Date& operator+=(int d)
             33     {
             34         *this = addDay(d);
             35         return *this;
             36     }
             37     Date& operator-=(int d)
             38     {
             39         *this = subDay(d);
             40         return *this;
             41     }
             42     friend bool operator<(const Date& d1, const Date& d2);
             43     friend int operator-(const Date& d1, const Date& d2);
             44     friend Date operator+(const Date& date, int day);
             45     friend Date operator-(const Date& date, int day);
             46     friend istream& operator>>(istream& in, Date& date);
             47     friend ostream& operator<<(ostream& outconst Date& date);
             48 };
             49 
             50 Date Date::addDay(int d) const
             51 {
             52     // 不能攔路判斷,因?yàn)樵谑?nbsp;2 月前還是在后,判斷閏年時(shí)許判斷今年還是明年,所以為了方便做統(tǒng)一處理。
             53     Date t = *this;
             54     int dif = 0;
             55     for (int m = 1; m < t.month; ++m)
             56     {
             57         dif += Months[isLeapYear(t.year)][m];
             58     }
             59     dif += (t.day - 1);
             60     d += dif;
             61     t.month = 1;
             62     t.day = 1;
             63 
             64     while (d > Years[isLeapYear(t.year)])
             65     {
             66         d -= Years[isLeapYear(t.year)];
             67         ++t.year;
             68     }
             69     while (d > Months[isLeapYear(t.year)][t.month])
             70     {
             71         d -= Months[isLeapYear(t.year)][t.month];
             72         ++t.month;
             73     }
             74     t.day += d;
             75     d = 0;
             76     return t;
             77 }
             78 
             79 Date Date::subDay(int d) const
             80 {
             81     Date t = *this;
             82     // 從 XXXX1231 開始往后減。
             83     int dif = 0;
             84     for (int m = t.month + 1; m <= 12++m)
             85     {
             86         dif += Months[isLeapYear(t.year)][m];
             87     }
             88     dif += (Months[isLeapYear(t.year)][t.month] - t.day);
             89     d += dif;
             90     t.month = 12;
             91     t.day = 31;
             92 
             93     while (d >= Years[isLeapYear(t.year)])
             94     {
             95         d -= Years[isLeapYear(t.year)];
             96         --t.year;
             97     }
             98     while (d >= Months[isLeapYear(t.year)][t.month])
             99     {
            100         d -= Months[isLeapYear(t.year)][t.month];
            101         --t.month;
            102         t.day = Months[isLeapYear(t.year)][t.month];
            103     }
            104     t.day -= d;
            105     d = 0;
            106     return t;
            107 }
            108 
            109 bool operator<(const Date& d1, const Date& d2)
            110 {
            111     return d1.year < d2.year || d1.month < d2.month || d1.day << d2.day;
            112 }
            113 
            114 int operator-(const Date& t1, const Date& t2)
            115 {
            116     bool f = false;
            117     Date d1, d2;
            118     if (t1 < t2)
            119     {
            120         d1 = t1;
            121         d2 = t2;
            122     }
            123     else
            124     {
            125         d1 = t2;
            126         d2 = t1;
            127         f = true;
            128     }
            129     int ret = 0, dif1 = 0, dif2 = 0, dif3 = 0;
            130     for (int m = 1; m < d1.month; ++m)
            131     {
            132         dif1 += Months[isLeapYear(d1.year)][m];
            133     }
            134     dif1 += d1.day;
            135     for (int m = 1; m < d2.month; ++m)
            136     {
            137         dif2 += Months[isLeapYear(d2.year)][m];
            138     }
            139     dif2 += d2.day;
            140     for (int y = d1.year; y < d2.year; ++y)
            141     {
            142         dif3 += Years[isLeapYear(y)];
            143     }
            144     ret = dif2 + dif3 - dif1;
            145     return ret;
            146 }
            147 
            148 Date operator+(const Date& date, int day)
            149 {
            150     if (day > 0)
            151     {
            152         return date.addDay(day);
            153     }
            154     else if (day < 0)
            155     {
            156         return date.subDay(-day);
            157     }
            158     else
            159     {
            160         return date;
            161     }
            162 }
            163 
            164 Date operator-(const Date& date, int day)
            165 {
            166     if (day > 0)
            167     {
            168         return date.subDay(day);
            169     }
            170     else if (day < 0)
            171     {
            172         return date.addDay(-day);
            173     }
            174     else
            175     {
            176         return date;
            177     }
            178 }
            179 
            180 istream& operator>>(istream& in, Date& date)
            181 {
            182     in >> date.year >> date.month >> date.day;
            183     if (!in)
            184     {
            185         cerr << "Input error!" << endl;
            186         exit(1);
            187     }
            188     return in;
            189 }
            190 
            191 ostream& operator<<(ostream& outconst Date& date)
            192 {
            193     out << date.year << '-' << date.month << '-' << date.day;
            194     return out;
            195 }
            196 
            197 int main()
            198 {
            199     // cout << Date(2001, 1, 1).addDay(3) << endl;
            200     Date d1, d2;
            201     while (cin >> d1 >> d2)
            202     {
            203         cout << d1 << endl;
            204         cout << d2 << endl;
            205         cout << d1 - d2 << endl;
            206         int n;
            207         cin >> n;
            208         cout << d1 + n << endl;
            209         cout << d1 - n << endl;
            210         cout << d2 + n << endl;
            211         cout << d2 - n << endl;
            212         d1 += n;
            213         cout << d1 << endl;
            214         d1 -= n;
            215         cout << d1 << endl;
            216         d2 += n;
            217         cout << d2 << endl;
            218         d2 -= n;
            219         cout << d2 << endl;
            220     }
            221     return 0;
            222 }
            posted on 2011-04-22 11:13 unixfy 閱讀(280) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲精品综合久久| 99久久国产综合精品五月天喷水 | 久久狠狠爱亚洲综合影院| 久久天天躁狠狠躁夜夜2020 | 色综合合久久天天给综看| 午夜福利91久久福利| 亚洲女久久久噜噜噜熟女| 久久精品欧美日韩精品| 99久久99久久精品国产片果冻| 国内精品欧美久久精品| 亚洲av伊人久久综合密臀性色| 国产精品一区二区久久精品| 青青青青久久精品国产h久久精品五福影院1421 | 久久久久人妻一区精品性色av| 久久综合九色综合精品| 久久亚洲AV成人无码| 久久精品国产影库免费看| 武侠古典久久婷婷狼人伊人| 99久久国语露脸精品国产| 亚洲欧美日韩久久精品| 亚洲国产精品久久久久久| 人妻少妇久久中文字幕| 久久综合久久鬼色| 激情综合色综合久久综合| 国产精品美女久久久| 国产精品美女久久福利网站| 国产精品成人精品久久久| 久久夜色精品国产噜噜麻豆| 中文字幕无码久久久| 日日狠狠久久偷偷色综合96蜜桃| 伊人久久免费视频| 久久超碰97人人做人人爱| 日韩精品久久无码中文字幕 | 久久99国内精品自在现线| 久久久久久国产a免费观看黄色大片 | 国产精品成人久久久久久久| 久久成人国产精品二三区| 久久99国产精品99久久| 久久久久亚洲av无码专区导航| 伊人久久综合精品无码AV专区| 狠狠精品久久久无码中文字幕 |