codeforces 304B. Calendar (日期相减)

来源:互联网 发布:天敏网络机顶盒设置 编辑:程序博客网 时间:2024/05/15 23:48

http://codeforces.com/problemset/problem/304/B

大致题意:给出两个日期,求出它们之间相差的天数。

自己用C++写的挺长(主要是瑞年的干扰)。。。

#include <iostream>#include <cstdio>using namespace std;bool leap[3000];int month[15];int main(){    //freopen("cin.txt","r",stdin);    for(int i=1900;i<=2038;i++){        if(i%400==0||(i%4==0&&i%100!=0)) leap[i]=1;    }    for(int i=1;i<=7;i+=2){        month[i]=31;    }    month[2]=28;    month[4]=month[6]=30;    month[9]=month[11]=30;    for(int i=8;i<=12;i+=2) month[i]=31;    int y1,m1,d1,y2,m2,d2;    while(~scanf("%d:%d:%d",&y1,&m1,&d1)){        scanf("%d:%d:%d",&y2,&m2,&d2);        bool change=0;        if(y1>y2) change=1;        if(y1==y2&&m1>m2) change=1;        if(y1==y2&&m1==m2&&d1>d2) change=1;        if(change){            y1=y1^y2;  y2=y1^y2;  y1=y1^y2;            m1=m1^m2;  m2=m1^m2;  m1=m1^m2;            d1=d1^d2;  d2=d1^d2;  d1=d1^d2;        }        int ans=0;        if(y1==y2&&m1==m2){  //同年同月            ans=d2-d1;            printf("%d\n",ans);            continue;        }        if(y1==y2){ //同年            for(int i=m1+1;i<m2;i++){                ans+=month[i];            }            if(m1==2){  //开始                if(leap[y1]){                    ans+=29-d1;                }                else ans+=28-d1;            }            else if(m1==1){                if(leap[y1]&&m2>2)ans++;                ans+=31-d1;            }            else ans+=month[m1]-d1;            ans+=d2;  //结束            printf("%d\n",ans);            continue;        }        for(int i=y1+1;i<y2;i++){ //中间            ans+=365;            if(leap[i]) ans++;        }        if(m1<=2) {   //第一年            if(m1==1){                if(leap[y1]) ans+=29;                else ans+=28;                ans+=(31-d1);                for(int i=3;i<=12;i++) ans+=month[i];            }            else {                if(leap[y1]) ans+=(29-d1);                else ans+=(28-d1);                for(int i=3;i<=12;i++) ans+=month[i];            }        }        else {            ans+=(month[m1]-d1);            for(int i=m1+1;i<=12;i++) ans+=month[i];        }        if(m2>2){            ans+=31;            if(leap[y2])ans+=29;            else ans+=28;            for(int i=3;i<=m2-1;i++) ans+=month[i];            ans+=d2-1;        }        else if(m2==2){            ans+=31;            ans+=(d2-1);        }        else {            ans+=d2-1;        }        ans++;        printf("%d\n",ans);    }    return 0;}

本想用java写的,提交后神奇的事情发生了,自己本地的运行结果和测评机的结果居然不一样。

我java 1.7.0和java 1.8.0都选过,结果提交后第二个例子的结果就不一样,我滴神。。。

代码:

import java.text.*;import java.util.*;public class Main {    public static void main(String[] args) {        DateFormat  df=new SimpleDateFormat("yyyy:MM:dd");        Date d1=new Date();        Date d2=new Date();        String s1,s2;        Scanner cin=new Scanner(System.in);        while(cin.hasNext()) {            s1 = cin.next();            s2 = cin.next();            try {                d1 = df.parse(s1);                d2 = df.parse(s2);                if (d1.compareTo(d2) > 0) {                    Date t = new Date();                    t = d1;                    d1 = d2;                    d2 = t;                }            }            catch(Exception e){            }            long diff = d2.getTime() - d1.getTime();//差值是微秒级别            long days = diff / (1000 * 60 * 60 * 24);            System.out.println(days);        }    }}


0 0