C++_万年历_确定n年之后的日期

方法一:一天天的增减,但效率较低

#include<iostream>
using namespace std;
class CDate
{
public:
    int n;
    char BA;
    CDate(int a=2018,int b=1,int c=1)  //析构
    {
        year=a;
        month=b;
        day=c;
    }
    void print()
    {
        cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
    }
    bool leapYear()  //判断闰年
    {
        if((year%4==0&&year%100!=0)||year%400==0)
            return 1;
        else
        return 0;
    }
    void AddOneDay(){  //加一天
        if(++day>GetDays()){
            day=1;
            if(++month>12){
                month=1;
                year++;
            }
        }
        n--;
    }
    void SubOneDay(){  //减一天
        if(--day==0){
            if(--month==0){
                month=12;
                year--;
            }
            day=GetDays();
        }
        n--;
    }

    int GetDays(){
        int days=0;
        switch(month)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:days=31;break;
        case 4:
        case 6:
        case 9:
        case 11: days=30;break;
        case 2: if(leapYear())days=29;
            else days=28;
         }
        return days;
    }
private:
    int year;
    int month;
    int day;
};
int main()
{
    CDate d(2018,11,9);  //设置初始日期
    cout<<"Please input B(before) or A(after)?"<<endl;
    cin>>d.BA;  //用于判断是加还是减
    while(d.BA!='A'&&d.BA!='B')
    {
        cout<<"format error!Please input again"<<endl;
        cin>>d.BA;
    }
    cout<<"Please input days:"<<endl;
    cin>>d.n;     //用于统计增减的天数
    while(d.n!=0)
    {
        if(d.BA=='A')
        d.AddOneDay();
        else
        d.SubOneDay();
    }
    d.print();
}

 

方法二:对于方法一进行改进,按照年月日依次减少

#include<iostream>
using namespace std;
class CDate
{
public:
    int n;
    char BA;
    CDate(int a=2018,int b=1,int c=1)  //析构
    {
        year=a;
        month=b;
        day=c;
    }
    void print()
    {
        cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
    }
    bool leapYear()  //判断闰年
    {
        if((year%4==0&&year%100!=0)||year%400==0)
            return 1;
        else
        return 0;
    }

void SubDays(){
    while(n>365)  //一年一年的减
    {
        if(leapYear())
        {
            year-=1;
            n-=366;
        }
        else
        {
            year-=1;
            n-=365;
        }
    }
    if(n==365&&leapYear()==0)
            {
                year-=1;
                n=0;
            }
    while(n>GetDays())  //一个月一个月的减
    {
        n-=GetDays();
        month-=1;
        if(month==0)
            month=12;
    }
    if(day>n)
        day-=n;
    else
    {
        month--;
        day=GetDays()-(n-day);
    }
}

void AddDays(){
    while(n>365)  //一年一年的加
    {
        if(leapYear())
        {
            year+=1;
            n-=366;
        }
        else
        {
            year+=1;
            n-=365;
        }
    }
    if(n==365&&leapYear()==0)
            {
                year+=1;
                n=0;
            }
    while(n>GetDays())  //一个月一个月的加
    {
        n-=GetDays();
        month+=1;
        if(month==13)
            month=1;
    }
    if(day+n<=GetDays())
        day+=n;
    else
    {

        day=n-(GetDays()-day);
        month++;
    }
}

    int GetDays(){
        int days=0;
        switch(month)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:days=31;break;
        case 4:
        case 6:
        case 9:
        case 11: days=30;break;
        case 2: if(leapYear())days=29;
            else days=28;
         }
        return days;
    }
private:
    int year;
    int month;
    int day;
};
int main()
{
    CDate d(2018,11,9);  //设置初始日期
    cout<<"Please input B(before) or A(after)?"<<endl;
    cin>>d.BA;  //用于判断是加还是减
    while(d.BA!='A'&&d.BA!='B')
    {
        cout<<"format error!Please input again"<<endl;
        cin>>d.BA;
    }
    cout<<"Please input days:"<<endl;
    cin>>d.n;     //用于统计增减的天数
    if(d.BA=='A')
    d.AddDays();
    else
    d.SubDays();
    d.print();
}

https://files.pythonhosted.org/packages/76/04/43153bfdfcf6c9a4c38ecdb971ca9a75b9a791bb69a764d652c359aca504/tensorflow_gpu-1.14.0-cp36-cp36m-manylinux1_x86_64.whl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值