18岁生日

11 篇文章 0 订阅
6 篇文章 0 订阅
B - 18岁生日
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

当你还是18岁的时候,那个曾经一起追过的女孩刚好也是18岁,而且她的生日就要到了,你突然想到一个问题,是不是每个人到18岁生日所经过的天数都是一样的呢?我们来算一下吧

Input

首先输入一个整数n,表示有n组数据,格式是YYYY-MM-DD。

Output

对于每组数据输出一行,每行一个数,表示从出生到18岁生日所经过的天数。如果没有18岁生日,就输出-1。

Sample Input

 

2
1992-2-1
1988-3-5

Sample Output

 

6575
6574

#include<cstdio>
int main(){
	int t; scanf("%d",&t);
	int y,m,d;
	while(t--){
		int day=0;
		scanf("%d-%d-%d",&y,&m,&d);
		if(m==2&&d==29&&(y+18)%400!=0){
			printf("-1\n");
		}//判断是否有生日
		else{
			if(( ( y%4==0&&y%100!=0 ) || (y%400==0) )&& m<3 ){
				day+=366;}
			else if( ( (y+18)%4==0 && (y+18)%100!=0 || (y+18)%400==0) &&m>2)
					day+=366;
			else 	
				day+=365;
		y++;//判断生日那一年或最后一年是否为闰年
		for(int i=0;i<17;i++){
			if((y%4==0&&y%100!=0)||y%400==0){
				day+=366;
			}
			else
				day+=365;
			y++;
		}//除第一年和最后一年之间的年份天数相加
		printf("%d\n",day);
	}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值