题解 | 日期差值

#include<iostream>
#include<cstdio>
using namespace std;

bool leapyear(int n){
    if(n%4==0&&n%100!=0||n%400==0)   
        return true;
    else
         return false;
}
int main(){
    char str1[9],str2[9];
    int Y1,M1,D1,Y2,M2,D2;
    while(cin>>str1>>str2){
        int sub=0;
        int days1=0,days2=0;
        sscanf(str1,"%4d%2d%2d",&Y1,&M1,&D1);
        sscanf(str2,"%4d%2d%2d",&Y2,&M2,&D2);
        if(Y1!=Y2){
            for(int i=Y1+1;i<Y2;i++){
                if(leapyear(i))
                     sub+=366;
                else
                     sub+=365;
            }
            int month1[]={31,leapyear(Y1)?29:28,31,30,31,30,31,31,30,31,30,31};
            int month2[]={31,leapyear(Y2)?29:28,31,30,31,30,31,31,30,31,30,31};
            for(int i=0;i<M1-1;i++){
                days1+=month1[i];
            }
            days1+=D1;
            if(leapyear(Y1))
                days1=366-days1;
            else
                days1=365-days1;
            for(int j=0;j<M2-1;j++){
                days2=days2+month2[j];
            }
            days2+=D2;
            sub=sub+days1+days2+1;
            cout<<sub<<endl;
        }
        else{
        	int month[]={31,leapyear(Y1)?29:28,31,30,31,30,31,31,30,31,30,31};
        	if(M1==M2){
        		sub=D2-D1+1;
			}
			else{
				for(int i=M1+1;i<M2;i++){
					sub+=month[i-1];
				}
				sub=sub+month[M1-1]-D1+D2+1;
			}
			cout<<sub<<endl;
		}
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务