小明学长回学校

题目描述

在未来的某一天,小明学长躺在他XXX平米的别墅里喝着龙井,突然一种莫名其妙的感觉涌上心头:一晃这么长的时间过去了,记得当时和队友在331有时因为想出一道题的好的解法能兴奋的喊出来,真想回去再打场比赛。于是小明学长就想约上那些老队友一起回去看看,但是又不想开车回去,因为他比较喜欢锻炼,所以想骑着山地车来次长途的旅行,顺便还能看看沿途的风景。现在学长准备year0-month0-day0早晨出发,和老队友们约好year0-month1-day1晚上到达(晚上更适合回忆嘛╮( ̄▽  ̄)╭),学长想知道这次回去路上需要多少天,但是又懒得计算,所以就麻烦聪明的学弟你来帮学长算算吧。

输入

第一行输入一个整数n,表示有n组数据。
每组测试数据占一行,分别为两个日期,日期格式为:year-month-day,用空格隔开。具体见输入样例。约定两个日期年份相同。

输出

对于每组测试数据,输出占一行,为两个日期之间的时间间隔,以天为单位。

样例输入

2
2018-10-27 2018-10-30
2018-11-1 2018-11-11

样例输出

4
11

解题思路:

1:先判断是否在同一个月,是,直接day1-day0就可以得答案,不是往下

2:t=day1,

3:判断(month0+1)<month1是进入循环,不是往下

4:month0的剩余天数加上t就得答案。

#include<iostream>
#include<string>
#include<ctime>
using namespace std;
int main()
{
	int n;                       //n组数据 
	cin>>n;
	int year0,month0,day0;
    int year1,month1,day1;
	char ch1,ch2;           //字符“-”。 
	char ch3,ch4;
	int t=0,l;
	int a;
    while(n--)               
    {
    t=0;
	cin>>year0>>ch1>>month0>>ch2>>day0;	
	cin>>year1>>ch3>>month1>>ch4>>day1;
    if(month0==month1)                //在同一个月 
        t=day1-day0+1;	
    else                               //不在同一个月
    {
    	t=day1;
    	l=month0+1;
    	while(l<month1)                // month1-month0>1
    	{
    	  switch(l)
	   	  {
		   	  case 2:	
		   	  if(year0%4==0&&year0%100!=0||year0%400==0)
			  {
			  	 t=t+29;
			  	 break;
			  } 
			  else
			  {
			  	 t=t+28;
			  	 break;
			  }	
		   	  case 3:
		   	  case 5:
		   	  case 7:
		   	  case 8:
		   	  case 10:
		   	  case 12:
				 t=t+31;
				 break;
			  case 4:
		   	  case 6:
		   	  case 9:
		   	  case 11:
				 t=t+30;
				 break; 	
	     }
		 l++;	
		}
		if(month0==1||month0==3||month0==5||month0==7||month0==8||month0==10)
          t=t+31-day0+1;               //month0所在月份 
        else if(month0==2)
         {
         	if(year0%4==0&&year0%100!=0||year0%400==0)
         	t=t+29-day0+1;
         	else
         	t=t+28-day0+1; 	
		 }
		else
		t=t+30-day0+1;   	
    }
	cout<<t;	
	}
	return 0;
	
}

猜你喜欢

转载自blog.csdn.net/qq_42387291/article/details/83829632