ACM. HJ73 计算日期到天数转换 ●
描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) ,空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
示例
输入:2012 12 31
输出:366
题解
1. 模拟
用数组记录每个月的天数
#include <iostream>
using namespace std;
int main(){
int year, mon, day;
cin >> year >> mon >> day;
int Two = (year > 1900 && year % 4 == 0)? 29 : 28;
int monDay[] = {31, Two, 31, 30, 31, 30, 31, 31, 30, 31 ,30, 31};
int ans = 0;
for(int i = 0; i < mon - 1; ++i){
ans += monDay[i];
}
ans += day;
cout << ans;
return 0;
}
2. 前缀和优化
#include <iostream>
using namespace std;
int main(){
int year, mon, day;
cin >> year >> mon >> day;
int run = (year > 1900 && year % 4 == 0)? 1 : 0;
int monDay[] = {0,31,59,90,120,151,181,212,243,273,304,334,365};
int ans = 0;
if(mon > 2){
ans = monDay[mon-1] + day + run;
}else{
ans = monDay[mon-1] + day;
}
cout << ans;
return 0;
}