Description
Apache总是觉得人生短暂,不能够尽欢。所以他还想再活五百年,于是Apache变跋山涉水来到传说中的蓬莱仙岛向各位长者询问长生的秘诀。长者毕竟是长者,怎么可能让一个年轻人如此容易的得到如此秘诀呢。长者给Apache设置了九九八十一道题目,通关后便可取得秘诀,再活五百年。长者给出的第一道题目如下: 蓬莱仙岛上曾经住着很多长者,我现在给出若干个长者的出生日期以及得道升天的日期,那么请你给出长者在蓬莱仙岛上呆了多少天?
Input
若干组出生日期,以及得道升天日期(顺序可能相反)。各占一行。年份不超过2017。
Output
一行输出一位长者所呆的天数。
Sample Input
1995:03:09 1991:11:12
Sample Output
1213
Hint
Source
2017年6月月赛-暨中南大学暑期集训选拔赛第二场
思路:判断闰年平年,求y:m:d是该年第几天,后面减前面再加上中间整年的天数就OK
code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int a1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年366
const int a2[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年365
int IsLeapYear(int y)
{
return (y%100!=0&&y%4==0)||(y%400==0);
}
int day(int y,int m,int d)
{
int sum=d;
if(IsLeapYear(y))
{
for(int i=1; i<m; i++)
sum+=a1[i];
}
else
{
for(int i=1; i<m; i++)
sum+=a2[i];
}
return sum;
}
int main()
{
ios::sync_with_stdio(false);
int y1,m1,d1,y2,m2,d2;
char c;
while(cin>>y1>>c>>m1>>c>>d1)
{
cin>>y2>>c>>m2>>c>>d2;
int sum;
int k=day(y2,m2,d2)-day(y1,m1,d1);
if(y1==y2) sum=abs(k);
else sum=y1<y2?k:(-k);
int ymin=min(y1,y2);
int ymax=max(y1,y2);
for(int i=ymin; i<ymax; i++)
sum+=(IsLeapYear(i))?366:365;
cout<<sum<<endl;
}
return 0;
}