1878: 蛤玮准备礼物
Description
蛤玮的妹子要过生日了,经过千挑万选,蛤玮决定给妹子买一盒水彩铅笔,然而卖多少个才合适呢.机智的蛤玮决定数一数今天是妹子出生的第多少天,然后就买那么多根铅笔.
给出蛤玮妹子的生日和今天的日期,求蛤玮一共需要买多少.
注意:生日当天算第0天.
Input
T(1<=T<=1000),表示数据组数.
每组数据一行y1,m1,d1,y2,m2,d2,其中y1,m1,d1表示妹子生日的年月日,y2,m2,d2表示蛤玮所在时空的当前天的年月日.
(1900<=y<=1000000, 1<=m<=12, 1<=d<=当月应有天数).输入保证当前天在妹子生日之后.
Output
每组数据输出一行,蛤玮要买多少根铅笔.
Sample Input
2
1995 10 24 1995 10 25
1996 1 9 1996 3 7
Sample Output
1
58
AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
bool year(int x){
if(x%400==0||(x%4==0&&x%100!=0))
return 1;
else return 0;
}
int math(int y,int m){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
return 31;
else if(m==2)
return year(y)?29:28;
else
return 30;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int y1,m1,d1,y2,m2,d2;
int num1,num2,sum;
scanf("%d %d %d %d %d %d",&y1,&m1,&d1,&y2,&m2,&d2);
num1=0;num2=0;sum=0;
for(int i=1; i<m1; i++)
num1+=math(y1,i);
num1+=d1;
for(int i=1; i<m2; i++)
num2+=math(y2,i);
num2+=d2;
if(y1==y2)
{
printf("%d\n",num2-num1);
continue;
}
else
{
sum+=year(y1)?366-num1+num2:365-num1+num2;
if((y2-1-(y1+1))>400)//400年一个循环
{
int flag_num=(y2-1-(y1+1))/400;//循环次数
int flag_sum=0;//循环数值
for(int i=y1+1; i<=y1+400; i++)
flag_sum+=year(i)?366:365;
sum+=flag_num*flag_sum;
for(int i=y1+flag_num*400+1; i<y2; i++)
sum+=year(i)?366:365;
}
else//不足400年
{
for(int i=y1+1; i<y2; i++)
sum+=year(i)?366:365;
}
printf("%d\n",sum);
}
}
return 0;
}