codeforces 304B. Calendar (日期相减)
#include 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;i2)ans++; ans+=31-d1; } else ans+=month[m1]-d1; ans+=d2; //结束 printf("%d\n",ans); continue; } for(int i=y1+1;i2){ 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); } }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~