题目链接: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;
}