文章

34

粉丝

0

获赞

6

访问

984

头像
日期累加 题解(条理清晰,计算总天数):
P1446 北京理工大学机试题
发布于2025年8月5日 18:13
阅读数 25

#include<bits/stdc++.h>
using namespace std;

int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

bool isLeapYear(int y){
	return (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0));
}

int main(){
	
	int n; cin >> n;
	int y, m, d, cnt;
	
	while(n-- > 0){
		cin >> y >> m >> d >> cnt;
		
		month[2] = isLeapYear(y) ? 29 : 28;
		
		// 计算初始日期为当年的第几天
		int sum1 = d;
		for(int i = 1; i < m; i++){
			sum1 += month[i];
		}
		
		// 从年初开始计算结束日期
		cnt += sum1;
		m = 1; d = 0;
		while(cnt > 0){
			if(cnt > month[m]){
				cnt -= month[m];
				if(m == 12){
					m = 1;
					y ++;
					month[2] = isLeapYear(y) ? 29 : 28;
				} else {
					m ++;
				}
			} else {
				d = cnt;
				break;
			}
		}
		
		printf("%04d-%02d-%02d\n", y, m, d);
	}
	
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发