题解 UVA11219 【How old are you?】

· · 题解

题意:给出两个日期,分别代表当前日期和一个人的出生日期,求这个人的岁数。

如果那一年这个人的生日还没到,这一年不计入。如果当前日期在出生日期之前,则输出 Invalid birth date 。如果计算出的岁数 > 130 ,则输出 Check birth date

那么直接用当前年份减去生日的年份,判断是否到了生日,如果没到岁数 -1 ,判断是否 <0>130 即可。

亲测不必检验日期是否真实存在。

CODE:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int T;
    string s1,s2;//当前&生日 
    scanf("%d",&T);
    for(int ZzX=1;ZzX<=T;ZzX++)
    {
        cin>>s1>>s2;
        int day1=(s1[0]-'0')*10+(s1[1]-'0');//以下部分计算出当前与生日的日、月年
        int day2=(s2[0]-'0')*10+(s2[1]-'0');
        int mon1=(s1[3]-'0')*10+(s1[4]-'0');
        int mon2=(s2[3]-'0')*10+(s2[4]-'0');
        int yea1=(s1[6]-'0')*1000+(s1[7]-'0')*100+(s1[8]-'0')*10+(s1[9]-'0');
        int yea2=(s2[6]-'0')*1000+(s2[7]-'0')*100+(s2[8]-'0')*10+(s2[9]-'0');
        printf("Case #%d: ",ZzX);//多测
        int delta=yea1-yea2;//计算岁数
        if((mon1<mon2)||(mon1==mon2&&day1<day2))delta--;//如果还没到生日,那么这一年不算
        if(delta==0)printf("0\n");
        else if(delta<0)printf("Invalid birth date\n");//还未出生
        else if(delta>130)printf("Check birth date\n");//超过130岁
        else printf("%d\n",delta);
    }
    return 0;
}