文章

34

粉丝

0

获赞

6

访问

1.0k

头像
日期差值 题解:
P1290 上海交通大学/西北工业大学机试题
发布于2025年8月5日 17:32
阅读数 45

#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 y1,m1,d1; 
	int y2,m2,d2; 
	
	while(scanf("%4d%2d%2d",&y1,&m1,&d1) != EOF){
		scanf("%4d%2d%2d",&y2,&m2,&d2);
		
		int cnt = 1;
		
		for(int y = y1; y <= y2; y++){
			if(y != y2 || y == y1){
				if(y1 != y2){
					if(isLeapYear(y)) cnt += 366;
					else cnt += 365;
				}
				
				if(y == y1){
					// 开始日之年
					if(isLeapYear(y)) month[2] = 29;
					else month[2] = 28;
					
					for(int m = 1; m < m1; m++){
						cnt -= month[m];
					}
					cnt -= d1;
				}
			}
			if(y == y2){
				// 结束日之年
				if(isLeapYear(y)) month[2] = 29;
				else month[2] = 28;
				
				for(int m = 1; m < m2; m++){
					cnt += month[m];
				}
				cnt += d2;
			}
		}
		
		cout << cnt << endl;
	}
	
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发