题解 | #日期差值#
日期差值
https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c
#include <iostream>
using namespace std;
int GetMidYearday(int y1,int y2)
{//我们是为了算出中间空了多少年
int num=0;
if(y2-y1==1)
{
return 0;
}
for(int i=y1+1;i<y2;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
{
num+=366;
}
else {
num+=365;
}
}
return num;
}
int GetMonthday(int year, int month) {
int arr[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
return 29;
}
return arr[month];
}
int InitDay(int year,int month,int day)
{
int num = 0;
num+=day;
month--;
while (month > 0) {
num += GetMonthday(year, month);
month--;
}
return num;
}
int FinalDay(int Init, int year)
{
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
return 366-Init;
}
else {
return 365-Init;
}
}
int main()//别忘了加一
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
int year1=a/10000;int year2=b/10000;
int Midday=GetMidYearday(a/10000,b/10000);
int Initday1 = InitDay(a / 10000, (a % 10000 - a % 100)/100, a % 100);//获得到第一天初始
int Initday2 = InitDay(b / 10000, (b % 10000 - b % 100)/100, b % 100);
int finalday1=FinalDay(Initday1,year1);
int finalday2=FinalDay(Initday2,year2);
if(year1>year2)
{
printf("%d",Initday1+finalday2+Midday+1);
}
else if(year1==year2)
{
if(Initday1>=Initday2)
printf("%d",Initday1-Initday2);
else
printf("%d",Initday2-Initday1+1);
}
else {
printf("%d",Initday2+finalday1+Midday+1);
}
}
return 0;
}
// 64 位输出请用 printf("%lld")
