KY222 打印日期+KY111日期差值

一、KY222题目

二、代码

#include <climits>
#include <iostream>
using namespace std;
class Date{
    public:
        Date(int year =1,int month =2,int day =3)
        {
            _year = year;
            _month = month;
            _day = day;
        }
        int GetDay(int year ,int month);
        void Define(int n);


    public:
        int _year;
        int _month;
        int _day;
};
int Date::GetDay(int year ,int month)
        {
            static int a[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if(month == 2)
            {
                if((year%4==0 && year%100!=0 ) || year%400 == 0)
                return 29;
            }
            return a[month];
        }
void Date::Define(int n)
{
    _day +=n;
    while(_day>GetDay(_year,_month))
    {
        _day -=GetDay(_year,_month);
        ++_month;
        if(_month == 13)
        {
            ++_year;
            _month =1;
        }
    }
}

int main() {
    int year,num;
    cin>>year>>num;
    Date d(year,1,0);
    d.Define(num);
    printf("%04d-%02d-%02d",d._year,d._month,d._day);
    return 0;
    }
// 64 位输出请用 printf("%lld")

三、KY111题目

四、代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class Date {
public:
    Date(int year = 0, int month = 0, int day = 0) {
        _year = year;
        _month = month;
        _day = day;
    }
    int GetDay(int year, int month);
    bool operator<(const Date& d);
    int D_value(Date d);//计算日期差
    int Total_end();//某一年1月1日到某一天一共有多少天
    int Total_year();//某一年的总天数
public:
    int _year;
    int _month;
    int _day;

};

int Date::GetDay(int year, int month) {
    const static int a[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2) { //某年是闰年的时候,2月为29
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            return 29;
        }

    }
    return a[month];
}

bool Date::operator<(const Date& d)
{
    if (_year < d._year)
        return true;

    else if (_year == d._year && _month < d._month)
        return true;

    else if (_year == d._year && _month == d._month && _day < d._day)
        return true;

    else
        return false;
}

int Date::Total_end()//某一年1月1日到某一天一共有多少天
{
    int sum = _day;
    while (--_month)
    {
        sum += GetDay(_year, _month);
    }
    return sum;
}

int Date::Total_year()//某一年的总天数
{
    int sum = 0;
    for (int i = 1; i <= 12; i++)
    {
        sum += GetDay(_year, i);
    }
    return sum;
}


int Date::D_value(Date d)
{
    Date tmp(d);
    if ((*this) < tmp)
    {
        if (_year == tmp._year)
        {
            return tmp.Total_end() - this->Total_end();
        }
        else
        {
            int d1 = this->Total_year() - this->Total_end();
            int d2 = tmp.Total_end();
            int x = _year + 1;
            int d3 = 0;
            while (x != tmp._year)
            {
                Date x_(x, 1, 1);
                d3 += x_.Total_year();
                x++;
            }
            return d1 + d2 + d3;
        }
        
    }
    else//this大
    {
        if (_year == tmp._year)
        {
            return this->Total_end() - tmp.Total_end();
        }
        else
        {
            int d1 = tmp.Total_year() - tmp.Total_end();
            int d2 = this->Total_end();
            int x = tmp._year + 1;
            int d3 = 0;
            while (x != _year)
            {
                Date x_(x, 1, 1);
                d3 += x_.Total_year();
                x++;
            }
            return d1 + d2 + d3;
        }
    }

}



int main() {
    int year_1, month_1, day_1;
    int year_2, month_2, day_2;
    int date1, date2;
    while (scanf("%d%d", &date1, &date2) != EOF)
    {
        year_1 = date1 / 10000;
        month_1 = (date1 / 100) % 100;
        day_1 = date1 % 100;

        year_2 = date2 / 10000;
        month_2 = (date2 / 100) % 100;
        day_2 = date2 % 100;

        Date d1(year_1, month_1, day_1);
        Date d2(year_2, month_2, day_2);
        cout<<d1.D_value(d2)+1;//不加1时,相邻两天差1天
        return 0;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值