20歲生日
時間限制:1000 ms | 內存限制:65535 KB
難度:1
描述
路過這的20歲生日就要到了,他當然很開心,可是他突然想到一個問題,是不是每個人從出生開始,到達20歲生日時所經過的天數都是一樣的呢?似乎並不全都是這樣,所以他想請你幫忙計算一下他和他的幾個朋友從出生到達20歲生日所經過的總天數,讓他好來比較一下。
輸入
一個數T,後面T行每行有一個日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
輸出
T行,每行一個數,表示此人從出生到20歲生日所經過的天數。如果這個人沒有20歲生日,就輸出-1。
樣例輸入
1
1988-03-07樣例輸出 7305解題思路:先算出從出生到出生這年結束一共經過了多少天,然後加上從出生第2年到出生第19年每年的天數,最後加上20歲生日那年要經過多少天才是他的生日。 注意:(1)、如果出生這年是閏年,而20年後不是閏年,輸出-1;(2)、出生這天為出生的第0天
參考代碼:
[cpp]
#include<stdio.h>
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int leapyear(int x) //判斷閏年
{
if((x%4==0&&x%100!=0)||x%400==0)
return 1;
return 0;
}
int count(int a,int b,int c) //判斷一年中的第幾天
{
int s=0,i;
if(a%4==0&&a%100!=0||a%400==0)
{
for(i=1;i<b;i++)
s+=m[i];
if(b>2)
return s+c+1; //注意閏年2月是29天
else
return s+c;
}
else
{
for(i=1;i<b;i++)
s+=m[i];
return s+c;
}
}
int main()
{
int j,n,Y,M,D,sum,y,m,d;
scanf("%d",&n);
while(n--)
{
scanf("%d-%d-%d",&Y,&M,&D);
if(M==2&&D==29&&!leapyear(Y+20))
{
printf("-1\n");
continue;
}
sum=0;
if(leapyear(Y))
sum+=366-count(Y,M,D);
else
sum+=365-count(Y,M,D);
j=1;
Y++;
while(j<=20)
{
if(leapyear(Y)&&j!=20)
sum+=366;
else if(!leapyear(Y)&&j!=20)
sum+=365;
else if(j==20)
sum+=count(Y,M,D);
Y++;
j++;
}
printf("%d\n",sum);
}
return 0;
}
#include<stdio.h>
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int leapyear(int x) //判斷閏年
{
if((x%4==0&&x%100!=0)||x%400==0)
return 1;
return 0;
}
int count(int a,int b,int c) //判斷一年中的第幾天
{
int s=0,i;
if(a%4==0&&a%100!=0||a%400==0)
{
for(i=1;i<b;i++)
s+=m[i];
if(b>2)
return s+c+1; //注意閏年2月是29天
else
return s+c;
}
else
{
for(i=1;i<b;i++)
s+=m[i];
return s+c;
}
}
int main()
{
int j,n,Y,M,D,sum,y,m,d;
scanf("%d",&n);
while(n--)
{
scanf("%d-%d-%d",&Y,&M,&D);
if(M==2&&D==29&&!leapyear(Y+20))
{
printf("-1\n");
continue;
}
sum=0;
if(leapyear(Y))
sum+=366-count(Y,M,D);
else
sum+=365-count(Y,M,D);
j=1;
Y++;
while(j<=20)
{
if(leapyear(Y)&&j!=20)
sum+=366;
else if(!leapyear(Y)&&j!=20)
sum+=365;
else if(j==20)
sum+=count(Y,M,D);
Y++;
j++;
}
printf("%d\n",sum);
}
return 0;
}