当前位置: 代码迷 >> 综合 >> hdu - 1201 - 18岁生日
  详细解决方案

hdu - 1201 - 18岁生日

热度:91   发布时间:2024-01-10 13:52:17.0

题意:输入一个人的出生日期,问他过18岁生日时经过了多少天。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1201

——>>小心就好。

#include <iostream>
#include <cstdio>using namespace std;bool run(int y)     //判断闰年
{return (y % 400 == 0 || (y % 100 != 0 && y % 4 == 0));
}
int days(bool r, int m)     //计算各月天数
{switch(m){case 1:case 3:case 5:case 7:case 8:case 10:case 12: return 31;case 4:case 6:case 9:case 11: return 30;case 2:{if(r) return 29;else return 28;}default: return -1;}
}
int main()
{int T, y, m, d, i;cin>>T;while(T--){scanf("%d-%d-%d", &y, &m, &d);int sum = 0;bool yy = run(y);if(yy && m == 2 && d == 29 && !run(y+18)){printf("-1\n");continue;}sum += days(yy, m) - d;for(i = m+1; i <= 12; i++)sum += days(yy, i);for(i = y+1; i <= y+17; i++)if(run(i)) sum += 366;else sum += 365;y += 18;yy = run(y);sum += d;for(i = 1; i < m; i++) sum += days(yy, i);printf("%d\n", sum);}return 0;
}