问题 L: 一年中的第几天

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

发布了99 篇原创文章 · 获赞 63 · 访问量 6231

猜你喜欢

转载自blog.csdn.net/m0_43456002/article/details/102871971