日期模板

日期累加

http://www.nowcoder.com/questionTerminal/eebb2983b7bf40408a1360efb33f9e5d

给定一个日期题的模板;

#include<iostream>
using namespace std;
bool isLeapYear(int year){ //平均每四年一次闰年,但是400的倍数也是闰年
    if(year%4==0&&year%100!=0||year%400==0){
        return true;
    }return false;
}
int daytab[2][13]={ //日期表,记录每个月有多少天(其实只有二月有变化,闰年29,平年28)
        {0,31,28,31,30,31,30,31,31,30,31,30,31},
        {0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int main(){
    int m,year,month,day,n;
    cin>>m;
    while(m--){
        cin>>year>>month>>day>>n;
        n+=day;
        day=0;//例如2008 2 3 100-->2008 2 0 103(方便计算)
        while(n>=daytab[isLeapYear(year)][month]){//以月为单位,知道最后不满一个月
            n-=daytab[isLeapYear(year)][month];
            day=0;
            if(month==12){//如果month为12月了,则要进位一年
                month=1;year++;
            }else{
                month++;
            }
        }day+=n;
        if(day==0){//因为是设置从0开始的,所以比如2008 6 30会输出成2008 7 0,要转换一下
            month--;
            day=daytab[isLeapYear(year)][month];
        }
        printf("%04d-%02d-%02d\n",year,month,day);
    }
    return 0;
}
全部评论
有 bug 你试试 2952 2 8 692 结果是 2954-00-00
点赞
送花
回复
分享
发布于 2023-04-26 21:05 陕西

相关推荐

投递腾讯云智研发等公司8个岗位
点赞 评论 收藏
转发
9 收藏 评论
分享
牛客网
牛客企业服务