【HDOJ】1201 -> 18岁生日

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1201

心得:

        每年当做365天,每过一次闰年2月29日(出生时不包括,18岁生日时包括)总天数就+1。

代码:

#include <iostream>
using namespace std;
const int NUM_OF_BIRTHDAY=18;
bool LeepYear(int n){return ((n%4==0 && n%100!=0) || n%400==0)?1:0;}
int main(){
	char birth[15];
	int i,n,y,m,d,sum;
	bool flag;
	cin>>n;
	while(n--){
		cin>>birth;
		sscanf(birth,"%d-%d-%d",&y,&m,&d);
		sum=0;
		flag=(m==2 && d==29)?1:0;
		if(LeepYear(y) && (m==1 || (m==2 && d<29))) sum++;
		for(i=y+1;i<y+NUM_OF_BIRTHDAY;i++)
			if(LeepYear(i)) sum++;
		if(LeepYear(i) && ((m==2 && d==29) || m>2)) sum++;
		if(flag==1 && !LeepYear(i)) cout<<-1<<endl;
		else cout<<NUM_OF_BIRTHDAY*365+sum<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值