PTA 7-5 6004 18岁生日

文章目录

题目:

输入格式:

输出格式:

输入样例:

输出样例:

解题代码:

解题注意点:


题目:

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

输入格式:

一个整数T,表示测试数据的组数,接下来有T行日期,每行一个,格式是YYYY-MM-DD。如我的生日是1988-03-07。

输出格式:

T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

输入样例:

1
1988-03-07

输出样例:

6574

解题代码:

#include<stdio.h>
int leap(int t)
{
    if((t%4==0&&t%100!=0)||t%400==0)
        return 1;
    return 0;
}
int main()
{
    int n,i,y,m,d,sum,x;
    scanf("%d",&n);
    while(n--)
    {
        sum=0;
        scanf("%d-%d-%d",&y,&m,&d);
        if(m==2&&d==29)
        { printf("-1\n");
        continue;
        }
        if(leap(y)&&m<3)
            sum++;
        x=y+18;
        if(leap(x)&&m>=3)
            sum++;
        for(i=y+1;i<y+18;i++)
            if(i%4==0&&i%100!=0||i%400==0)
                sum++;
        printf("%d\n",365*18+sum);
    }
    return 0;
}

解题注意点:

1.输入时由于题中所给出的格式为YYYY-MM-DD,所以数与数之间要加 -,否则输入数据乱码

scanf("%d-%d-%d",&y,&m,&d);

2.注意特殊月份2月的天数,用leap进行标记

int leap(int t)
{
    if((t%4==0&&t%100!=0)||t%400==0)
        return 1;
    return 0;
}

3.人出生的时候不是1岁而是0岁

猜你喜欢

转载自blog.csdn.net/weixin_63249578/article/details/128534256