给出某个日期,判断这是当年的第几天,每年的1月1日是第1天,非闰年年份的12月31日是第365天。
输入
输入的第一个数为n,后接n个日期。日期用3个正整数按顺序表示年月日,中间用“-”连接。
输出
若输入的日期为错误,则输出“error date!”;否则输出这个日期是本年的第几天。每个日期对应一行输出。
样例输入
9
2010-01-01
2010-06-22
2010-12-31
2011-02-29
2011-07-18
2011-12-02
2012-02-29
2012-09-31
2012-12-31
样例输出
1
173
365
error date!
199
336
60
error date!
366
代码如下:
#include<stdio.h>
int run(int year)
{
if(year%4==0) {
if(year%100==0){
if(year%400==0){
return 1;
}
else{
return 0;
}
}
else{
return 1;
}
}
else{
return 0;
}
}
int judge(int y,int m,int d)
{
int flag = 1;
if(m==4||m==6||m==9||m==11){
if(d>30){
flag = 0;
}
}
else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
if(d>31){
flag = 0;
}
}
else{
if(run(y)){
if(d>29){
flag = 0;
}
}
else{
if(d>28){
flag = 0;
}
}
}
return flag;
}
int main()
{
int n;
scanf("%d",&n);
int y,m,d;
int dn;
int sum;
for(int i=0;i<n;i++){
scanf("%d-%d-%d",&y,&m,&d);
if(m>=1&&m<=12){//确保月份在1-12月
if(judge(y,m,d)){
sum = d;
for(int j =1;j<m;j++){
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
dn = 31;
}
else if(j==4||j==6||j==9||j==11){
dn = 30;
}
else if(j==2){
if(run(y)){
dn = 29;
}
else{
dn = 28;
}
}
sum += dn;
}
printf("%d\n",sum);
}
else{
printf("error date!\n");
}
}
else{
printf("error date!\n");
}
}
return 0;
}