题目描述
在未来的某一天,小明学长躺在他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;
}