1292 奥运倒计时

 

描述

距离2008年8月8日,北京奥运会开幕的日子越来越近了,我们迫不及待的等待这一天的来临。现在就请你来求某日期离奥运会开幕还有多少天。

输入

测试数据包含多组输入。 每组输入一行,格式为yyyy-mm-dd,yyyy表示年份,mm表示月份,dd表示日数。输入以0000-00-00结束。

输出

每组输出一行,仅包含一个整数d,即距离奥运会开幕的天数,如果奥运会已经开始或者结束,都输出-1。奥运会开幕当天输出0。

样例输入

2008-08-01
2008-08-08
2007-08-08
2009-03-17
0000-00-00

样例输出

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';
	}
	
}


 

你可能感兴趣的:(1292 奥运倒计时)