2017年10月28日是zstu的120周年校庆,撒花,撒花。为此KI决定设计一个程序,来庆祝我们的校庆:
给出某一天的日期year-month-date, 求这一天到2017-10-28还差几天。
Input
第一行有个整数T, 表示测试组数。T≦100。
接下来每个测试组,给出三个数year month date。(1900 <=year <=2017 ), 保证每个日期均合法,并且小于2017-10-28。
Output
对于每个测试组,请输出对应的答案。
Sample Input
1 2017 10 1
Sample Output
27
思路:如果不是2017年,就先算从他的下一年开始算,把整年的天数算完,例如,2015年10月1号,先把2016~2017这一年的天数算完,再把10月1号~2015年12月31号的算完,最后加上20171.1~201710.28就行了。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int t;
int y,m,d;
int i,ys,ms,ds,sum;
int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d",&t);
while(t--)
{
ys=ms=ds=0;
sum=
scanf("%d%d%d",&y,&m,&d);
if(y<2017)
{
for(i=y+1;i<2017;i++)
{
if((i%4==0)&&(i%100!=0)||(i%400==0))
ys+=366;
else
ys+=365;
}
for(i=m+1;i<=12;i++)
{
ms+=b[i-1];
if((y%4==0)&&(y%100!=0)||(y%400==0))
ms+1;
}
for(i=d+1;i<=b[m-1];i++)
{
ds+=1;
}
if(((y%4==0)&&(y%100!=0)||(y%400==0))&&m==2)
ds+=1;
sum=ys+ms+ds+301;
}
else
{
for(i=m+1;i<10;i++)
ms+=b[i-1];
if(m!=10)
{
for(i=d+1;i<=b[m-1];i++)
ds+=1;
}
else
ds=28-d;
sum=ms+ds;
}
printf("%d\n",sum);
}
}