链接:https://www.nowcoder.com/acm/contest/115/B
来源:牛客网
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018)
题目保证测试数据的正确性
输出描述:
输出题意要求的天数
输入
1 1999-09-09
输出
5020
思路:注意特殊情况就可以了
代码:
#include<stdio.h>
#define ll long long
int s[15]={0,28,25,28,0,28,27,28,28,27,28,27,28};
char tm[15];
int check(int n)
{
if(n%400==0||(n%4==0&&n%100!=0))
return 1;
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
getchar();
int n,y,r;
int i,j;
ll sum=0;
ll sum1=0;
scanf("%s",tm);
n=(tm[0]-'0')*1000+(tm[1]-'0')*100+(tm[2]-'0')*10+tm[3]-'0';
y=(tm[5]-'0')*10+tm[6]-'0';
r=(tm[8]-'0')*10+tm[9]-'0';
//printf("%d %d %d
",n,y,r);
for(i=1;i<y;i++)
sum1+=s[i];
if(y!=4)
for(i=1;i<=r;i++)
if(i!=4&&i!=14&&i!=24)
sum1++;
if(r==4||r==14||r==24)//注意日数位4,14,24的特殊情况
sum1++;
//printf("%d
",sum1);
if(n==2018)
{
sum=81-sum1+1;
}
else
{
sum+=81;
for(i=n+1;i<2018;i++)
{
if(i!=1994&&i!=2004&&i!=2014)
{
if(check(i))
sum+=303;
else
sum+=302;
//printf("%d ",i);
}
//printf("%d
",sum);
}
if(n!=1994&&n!=2004&&n!=2014)
{
if(check(n)&&y<=2)
sum+=303-sum1+1;
else
sum+=302-sum1+1;
}
}
printf("%lld
",sum);
}
return 0;
}