题解 | #日期累加#

日期累加

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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 14:08
点赞 评论 收藏
分享
测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
05-16 11:16
已编辑
东华理工大学 Java
牛客73769814...:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
牛客创作赏金赛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务