题解 | #日期累加#

日期累加

https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d

#include <stdio.h>
#define bool int
#define true 1
#define false 0
int days(int flag,int month){//每月有天
    int Day[2][13]={
        {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}
    };
    return Day[flag][month];
}
bool isRun(int year){//判断是否是闰年
    if((year%4==0 & year%100!=0)||(year%400==0)){
        return true;
    }
    return false;
}
int years(int year){
    if(isRun(year)){
        return 366;
    }
    return 365;
}
int main() {
    int c;
    int flag=0;//flag是1的时候代表是闰年
    int year,month,day,num;
    scanf("%d",&c);
    while (c--) { // 注意 while 处理多个 case
        scanf("%d %d %d %d", &year,&month,&day,&num);
        flag=isRun(year);
        //计算年月日是一年的第几天
        for(int i=0;i<month;++i){
            num+=days(flag,i);
        }
        num+=day;
        //第几天加上 num
        while(num>years(year)){//确定年份
            num-=years(year);
            year++;
        }
        flag=isRun(year);//年份可能更改后,重新确认是不是闰年
        month=0;
        while(num>days(flag,month)){//确定月份
            num-=days(flag,month);
            month++;
        }
        day=num;//确定天
        printf("%04d-%02d-%02d\n", year,month,day);
    }
    return 0;
}

全部评论

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务