您的位置:首页 > 其它

[ACM]18岁生日

2013-09-01 13:34 399 查看


Problem Description

Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。


Input

一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。


Output


Sample Input

1
1988-03-07



Sample Output

6574



Author

Gardon


Source

Gardon-DYGG Contest 2

解题思路:如下代码

代码:

#include <iostream>
using namespace std;
bool rui(int year)//判断瑞年
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else
return 0;
}
int main()
{
int T;
char a[11];//用来保存输入的年月日以及----
cin>>T;
int i,j;
int year,month,day,days;
for(i=1;i<=T;i++)
{
days=0;//需要输出的天数
for(j=0;j<10;j++)
cin>>a[j];
for(j=0;j<=3;j++)
if(a[j]!='0')
break;//判断0出现的位置,从而进行年份的计算
if(j==4)//前四位都为0,年份为0
year=0;
else if(j==3)
year=int(a[3]-'0');//前三位为0,第四位不为0,年份为1位数
else if(j==2)
year=int(a[2]-'0')*10+int(a[3]-'0');//前两位为0,第三位部位0,年份为2位数
else if(j==1)
year=int(a[1]-'0')*100+int(a[2]-'0')*10+int(a[3]-'0');//第一位为0,第二位不为0,年份为3位数
else
year=int(a[0]-'0')*1000+int(a[1]-'0')*100+int(a[2]-'0')*10+int(a[3]-'0');//第一位就不是‘0’,年份为4位数

//判断月份
if(a[5]=='0')
month=int(a[6]-'0');//月份的一个数为0,月份为一位数
else
month=int(a[5]-'0')*10+int(a[6]-'0');//月份为两位数

//判断日数
if(a[8]=='0')
day=int(a[9]-'0');
else
day=int(a[8]-'0')*10+int(a[9]-'0');

if(rui(year)&&month==2&&day==29&&!rui(year+18))
cout<<-1<<endl;//当出生为瑞年的2月29以及18年后的那一年不是瑞年(没有2月29日),即没有18岁生日
else
{
int temp;
temp=year;
for(;year<=temp+17;year++)
{
if((month<2)||(month==2&&day<=28))//日数小于等于二月28日
{

if(rui(year))
{
days+=366;
}
else
days+=365;
}
else
{
if(rui(year+1))
days+=366;
else
days+=365;
}
}
cout<<days<<endl;
}
}
return 0;
}


运行截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: