[HJ73 计算日期到天数转换]
描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) ,空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
示例1
输入:
2012 12 31
复制输出:
366
复制
示例2
输入:
1982 3 4
复制输出:
63
思路一:引入常量,判断年份
方法二:运用datetime模块,
- 实现思路
-
datetime库中的strftime方法支持以天数的方式输出
-
其中日期格式化符号%j就是天数表示
-
但是这样输出的结果是从001到366为止的字符串
-
我们还要从左边去掉所有的0才是最终的结果
-
- 时间复杂度:O(1),对于某个固定的年份和月日时期,计算的代价很小,常量级别的时间代价就可以解决问题
- 空间复杂度:O(1),只引入了常量级别的空间代价
优化三:
while True:
try:
y, m, d = map(int, input().split())
month = [31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31] # 平年的月份
if y % 400 == 0 or (y % 100 != 0 and y % 4 == 0):
month[1] = 29 # 闰年的月份
print(sum(month[:m-1]) + d) # 统计时间
except:
break