有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。题目牛客网链接。
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
每组数据输出一行,即日期差值
示例1
输入:
20110412
20110422
输出:
11
scanf("%4d%2d%2d",&year1,&month1,&day1);
对应的年份对应宽度为4,月份对应宽度为2,天数对应宽度为2,这里限制的输入的格式。int main()
{
int year1, month1, day1;
scanf("%4d%2d%2d", &year1, &month1, &day1);
int n1 = CountDay(year1, month1, day1);
int year2, month2, day2;
scanf("%4d%2d%2d", &year2, &month2, &day2);
int n2 = CountDay(year2, month2, day2);
cout << abs(n1 - n2) + 1 << endl;
}
1)先建立累计月份对应数组:
int mon[12]={0,31,59,90,120,151,181,212,243,273,304,334};
2)判断月份对应天数(月份大于2,需要考虑闰年)
int monthDay = mon[m-1];
if(m > 2 && ((y%4 == 0 && y%100 != 0) || y%400==0))
monthDay += 1;
3)返回 YearDay + monthDay + 输入的年份
4)计算日期差+1(1代表,日期连续,规定是日期差为两天)
#include <iostream>
using namespace std;
int mon[12]={0,31,59,90,120,151,181,212,243,273,304,334};
int CountDay(int y,int m,int d)
{
int yearDay = y*365+y/4-y/100+y/400;
int monthDay = mon[m-1];
if(m > 2 && ((y%4 == 0 && y%100 != 0) || y%400==0))
monthDay += 1;
return yearDay + monthDay + d;
}
int main()
{
int year1,month1,day1;
scanf("%4d%2d%2d",&year1,&month1,&day1);
int n1 = CountDay(year1,month1,day1);
int year2,month2,day2;
scanf("%4d%2d%2d",&year2,&month2,&day2);
int n2 = CountDay(year2,month2,day2);
cout<<abs(n1-n2)+1<<endl;
}
cs