杭电acm1201,算十八岁生日

来源:百度知道 编辑:UC知道 时间:2024/09/22 23:26:25
下面是我的代码,通不过,高手帮忙看看哪里不对啊,最好在我代码上改正,谢谢啦先
http://acm.hdu.edu.cn/showproblem.php?pid=1201
#include<iostream>
using namespace std;
int ln(int year){
if(year%400==0||(year%4==0&&year%100!=0)){
return 1;
}
else
return 0;
}

int main()
{
int a,b,c,n,i;
char d;
while(cin>>n){
while(n--){
int s=0;
int flag=0;
cin>>a>>d>>b>>d>>c;
if(b==2&&c==29){
cout<<-1<<endl;
flag=1;
}
else if(b<=2&&c!=29){
for(i=a;i<=a+18;i++){
if(ln(i)){
s++;
}
}
}
else{
for(i=a+1;i<=a+19;i++){
if(ln(i)){
s++;
}
}
}
if(!flag){
cout<<18*365+s<<endl;

#include<stdio.h>
int check(int a)
{
if(a%400==0||a%4==0&&a%100!=0) return 1;
return 0;
}
void main()
{
int year,month,day,ans,start;
int T;
scanf("%d",&T);
while(T--){
scanf("%d-%d-%d",&year,&month,&day);
if(month==2&&day==29) {printf("-1\n");continue;}
ans=0;
for(start=1;start<=18;++start)
if(check(year+start)) ans+=366;
else ans+=365;
if(check(year)) if(month<=2) ans++;
if(check(year+18)) if(month<=2) ans--;
printf("%d\n",ans);
}
}