牛客 KY258 : 日期累加

殤&璃發表於2020-10-24

在這裡插入圖片描述

#include<iostream>

using namespace std;

int main(){
    int m;
    cin >> m;
    
    int year, month, day, num;
    static int arr[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    
    for(int i = 0; i < m; ++i){
        cin >> year >> month >> day >> num;
        
        day += num;
        
        while(day > arr[month]){
            //天數大於當月最大天數, 需要進位
            //每次迴圈都要重置2月的值, 因為年份可能改變
            if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
                arr[2] = 29;
            else
                arr[2] = 28;
            
            //月份進位
            day -= arr[month];
            month++;
            
            //檢查年份是否需要進位
            if(month == 13){
                year++;
                month = 0;
            }
        }
        
        //按格輸出
        printf("%4d-%02d-%02d\n", year, month, day);
    }
    
    return 0;
}