日期累加

2020-04-03  本文已影响0人  HelloSam
图片.png
图片.png
//抄的
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    for (int i=0;i<n;i++)
    {
        int y,m,d,num;
        cin>>y>>m>>d>>num;
        int date[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        while(num>0)
        {
            if(num>date[m-1]-d+1)//需要加月甚至加年(先算这个月后面还有几天,加上n是不是还在这个月里,这种情况是不在了需要对月甚至对年做处理了)
            {//以 2008 2 3 30为例
                if(y%400==0||(y%4==0&&y%100!=0))//来判断这一年是否是闰年
                {
                    date[1]=29;//2月有29天
                }else
                {
                    date[1]=28;//平年有28天
                }
                num=num-date[m-1]+d;
                d=0;
                m++;
                if(m==13)
                {
                    y++;
                    m=1;
                }
            }else//这种情况是类似于2008 2 3 10这种,先算这个月后面还有几天,加上n是不是还在这个月里,这种情况是是在这个月里,上面的情况是不在这个月里了
            {
                d+=num;//2008 2 3 10 -> 2008 2 13,已经计算完了,直接跳出循环,主要是上面麻烦
                break;
            }
        }
        printf("%d-%02d-%02d\n",y,m,d);
    }
    return 0;
}

上一篇 下一篇

猜你喜欢

热点阅读