问题描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) ,
空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
示例1输入:
2012 12 31
输出:
366
示例2输入:
1982 3 4
输出:
63
问题分析
该问题就是数天数。😁
解决方案
我们只需要算出输入的日期距年初总共多少天即可。
代码
c
#include <iostream>
using namespace std;
int GetMonthDay(int year, int month)
{
const static int day_arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (month == 2
&& (year % 4 == 0 && year % 100 != 0 || (year % 400 == 0)))
{
return 29;
}
return day_arr[month];
}
int main()
{
int year, month, day;
cin >> year >> month >> day;
while (month != 1)
{
day += GetMonthDay(year, month - 1);
month--;
}
cout << day;
}