距离2008年8月8日,北京奥运会开幕的日子越来越近了,我们迫不及待的等待这一天的来临。现在就请你来求某日期离奥运会开幕还有多少天。
测试数据包含多组输入。 每组输入一行,格式为yyyy-mm-dd,yyyy表示年份,mm表示月份,dd表示日数。输入以0000-00-00结束。
每组输出一行,仅包含一个整数d,即距离奥运会开幕的天数,如果奥运会已经开始或者结束,都输出-1。奥运会开幕当天输出0。
7
0
366
-1
解题思路:
又是计算时间的问题,注意闰年即可。
#include<stdio.h> #include<string.h> main() { char time[20]; double result; int i,j; int a,b,c,d,e,f; int t; int count; scanf("%s",&time); getchar(); for(i=5;i<7;i++) time[i-1]=time[i]; time[6]=time[8]; time[7]=time[9]; time[8]='\0'; while(strcmp(time, "00000000")!=0) { if(strcmp(time, "20080808")>0) printf("-1\n"); else { a=(time[0]-48)*1000+(time[1]-48)*100+(time[2]-48)*10+time[3]-48; b=(2008-a)*365; c=(time[4]-48)*10+time[5]-48; d=(8-c); if(d==1) d=31; if(d==2) d=61; if(d==3) d=92; if(d==4) d=122; if(d==5) d=153; if(d==6) d=181; if(d==7) d=212; if(d==-1) d=-31; if(d==-2) d=-61; if(d==-3) d=-92; if(d==-4) d=-122; e=(time[6]-48)*10+(time[7]-48); f=(8-e); result=(b+d+f); count=0; if(strcmp(time,"20080229")<=0) { for(i=a;i<=2008;i++) { if((i%4==0&&i%100!=0)||(i%400==0)) count++; } if(c==1||c==2) result=result+count; else result=result+count; } printf("%.0lf\n",result); } scanf("%s",&time); getchar(); for(i=5;i<7;i++) time[i-1]=time[i]; time[6]=time[8]; time[7]=time[9]; time[8]='\0'; } }