题解 | #日期累加#

日期累加

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

#include<iostream>using namespace std;

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

int main(){int n; cin >> n;while (n--){int y, m, d, day;cin >> y >> m >> d >> day;int md[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} };

    int num = d;
    for (int i = 1; i < m; i++) num += md[ifrun(y)][i]; //记录当前日期所在第几天

        y += (num + day) / (ifrun(y) + 365); //确定年份
        day -= md[ifrun(y)][m] - d; //减去当月还剩多少天
        while (day > md[ifrun(y)][((m%12)+1)]) //当下一个月够减时 循环相减 找到day天以后所在月份,当不够减时 即可找出所在月份的所在天数
        {
            m = (m% 12)+1; 
            day -= md[ifrun(y)][m];
        }
        printf("%04d-%02d-%02d\n", y, (m+1)%12, day);
}

}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务