2682 - 天数
小艳昨晚梦见了一位老人,老人告诉她在她第20个生日时她的白马王子将会出现,她很想知道还要过几天她的白马王子才会出现,但是她总是算不清楚,所以今天一大早就找到了你——传说中的电脑高手,想请你帮她写个程序,告诉她答案。
Input
共两行:
第一行3个数,Y0,M0,D0数与数之间用空格隔开,分别为小艳的出生年月日(即第一个生日)
第二行3个数,Y,M,D数与数之间用空格隔开,分别为今天的年月日
Output
仅包含一行,即需要经过的天数
Examples
Input
1999 4 5 2009 12 12
Output
3036
Hint
【数据规模】
100%的数据,1≤Y0,Y≤3000
保证输入的日期合法
保证答案为正
【样例说明】
第20个生日即2018年4月5日
Solution C++
#include <cstdio> int main(void) { int y0, m0, d0, y, m, d, s=0, i; int md[12]={31,28,31,30,31,30,31,31,30,31,30,31}; scanf("%d%d%d%d%d%d", &y0, &m0, &d0, &y, &m, &d); y0 += 19; //目标年份 if(y%400==0 || y%4==0&&y%100>0) md[1] = 29; for(s=-d, i=0; i<m-1; ++i) s -= md[i]; // 负数表示当年已过的天数 for(; y<y0; ++y) { //中间年份的天数 if(y%400==0 || y%4==0&&y%100>0) s += 366; else s += 365; } if(y%400==0 || y%4==0&&y%100>0) md[1] = 29; else md[1] = 28; for(i=0, s+=d0; i<m0-1; ++i) s += md[i]; printf("%d\n", s); return 0; }
Hint
【数据规模】
100%的数据,1≤Y0,Y≤3000
保证输入的日期合法
保证答案为正
【样例说明】
第20个生日即2018年4月5日