题解 UVA11219 【How old are you?】
DeepSkyBlue__ · · 题解
题意:给出两个日期,分别代表当前日期和一个人的出生日期,求这个人的岁数。
如果那一年这个人的生日还没到,这一年不计入。如果当前日期在出生日期之前,则输出 Invalid birth date 。如果计算出的岁数 Check birth date 。
那么直接用当前年份减去生日的年份,判断是否到了生日,如果没到岁数
亲测不必检验日期是否真实存在。
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;
}