题解 | #日期累加#

日期累加

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

#include<stdio.h>

int run[] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int norun[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

int isRun(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        return 1;
    else
        return 0;
}

void result(int y, int m, int d, int days) {//给定日期,计算从这一天开始,经过days天是几号
    if (isRun(y)) {
        if (days > 366) {
            result(y + 1, 1, 1, days - 366);
        }
        else {
            for (int i = 0;;i++) {
                if (days > run[i]) {
                    days -= run[i];
                    m++;
                }
                else {
                    d = days;
                    break;
                }
            }
            printf("%04d-%02d-%02d\n", y, m, d);
        }
    }
    else {
        if (days > 365) {
            result(y + 1, 1, 1, days - 365);
        }
        else {
            for (int i = 0;;i++) {
                if (days > norun[i]) {
                    days -= norun[i];
                    m++;
                }
                else {
                    d = days;
                    break;
                }
            }
            printf("%04d-%02d-%02d\n", y, m, d);
        }
    }
}

int main(){
    int m;
    scanf("%d", &m);
    while (m--) {
        int y, m, d, days;
        scanf("%d %d %d %d", &y, &m, &d, &days);
        int sum = 0;
        //求出这一年已近过了几天,加到题给天数上
        if (isRun(y)) {
            for (int i = 0;i < m - 1;i++) {
                sum += run[i];
            }
            sum += d;
        }
        else {
            for (int i = 0;i < m - 1;i++) {
                sum += norun[i];
            }
            sum += d;
        }
        sum += days;
        result(y, 1, 1, sum);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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