36 条题解
-
15
P1007 求日龄
题目描述
年龄是指一个人出生后以年为长度计算的时间整数值。
同理,日龄指一个人出生后以日为长度计算的时间整数值。
请求出给定日期出生的人,到 2022 年 10 月 20 日的日龄吧。
思路
需要用到多个函数:
1.判断闰年
1582年以来公历的置闰规则:
普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
1582年以前的惯例:四年一闰;如果公元A年的A(正数)能被4整除,那么它就是闰年;如果公元前B年的B(正数)除以4余1,那么它也是闰年。
(1)四年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。 (2)每四百年再一闰:如果year能够被400整除,则year是闰年。
可以根据这些编出来:
int leap_year(int n) { if(n % 400 == 0) { return true; } else if(n % 4 == 0 && n % 100 != 0) { return true; } else { return false; } }
2.判断是第几天函数
int day_in_year(int y,int m,int d) { int ans = 0; for(int i = 1;i <= m - 1;i++) { ans += days[i] + (leap_year(y) && i == 2); } ans += d; return ans; }
不过这里就需要用一个数组:
int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
把他们穿起来:
int y,m,d; cin >> y >> m >> d; int a = day_in_year(y,m,d); int b = 293; for(int i = y;i < 2022;i++) { c += 365 + leap_year(i); } cout << c + b - a;
-搞定!
参考代码:
#include <iostream>//hetao3097453 using namespace std; int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int c; int leap_year(int n) { if(n % 400 == 0) { return true; } else if(n % 4 == 0 && n % 100 != 0) { return true; } else { return false; } } int day_in_year(int y,int m,int d) { int ans = 0; for(int i = 1;i <= m - 1;i++) { ans += days[i] + (leap_year(y) && i == 2); } ans += d; return ans; } int main() { int y,m,d; cin >> y >> m >> d; int a = day_in_year(y,m,d); int b = 293; for(int i = y;i < 2022;i++) { c += 365 + leap_year(i); } cout << c + b - a; return 0; }
hetao3097453(bililili @ 一钩出站)
2023年3月19日
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 5232
- 已通过
- 1492
- 上传者