给出某个日期,判断这是当年的第几天,每年的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; }