nyoj312 20岁生日

 我的方法:先计算他从出生的下一年开始到他20岁那年(只计算到生日那年,不是那月那天,比如1980-1-13,只计算1981.1.1-2000.1.1)共经历多少天,然后计算出生那年到下年的天数,再计算他二十岁那年到他生日那月那天,最后相加。
#include <stdio.h>
int main()
{
	int year,mon,day,sum1,sum2,sum3,t,i,flag1,flag2;
	scanf("%d",&t);
	while(t--)
	{
		flag1=flag2=0;
		int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//保存十二个月的天数,2月先用平年计算
		scanf("%d-%d-%d",&year,&mon,&day);
                sum1=sum2=sum3=0;
		for(i=year+1;i<year+20;i++)
		{
			if(i%4==0&&i%100!=0||i%400==0)
				sum1+=366;
			else
				sum1+=365;
		}//计算出生下一年到20岁那年的天数
		if(year%4==0&&year%100!=0||year%400==0)
			a[2]=29,flag1=1;//如果出生那年为闰年2月要修改为29天,并且标记flag1=1;
		for(i=mon+1;i<13;i++)
			sum2=sum2+a[i];
		sum2=sum2+a[mon]-day;//计算出生那年到下一年的天数
		a[2]=28;
		if((year+20)%4==0&&(year+20)%100!=0||(year+20)%400==0)
			a[2]=29,flag2=1;//如果二十岁生日那年为闰年flag2=1;
		for(i=1;i<mon;i++)
			sum3=sum3+a[i];
		if(flag1&&!flag2&&mon==2&&day==29)
			printf("-1\n");//如果出生那年为闰年且为2月29日, 如果year+20不是闰年,那么这个人没有20岁生日。
		else
		printf("%d\n",sum1+sum2+sum3+day);
	}
	return 0;
}        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值