题目要求
以 年-月-日 的形式给定一个日期,计算给定的日期是当年第几天。注意闰年二月有 29天。
样例1
输入:2021-12-31
输出:365
样例2
输入:2022-01-01
输出:1
注意事项:
我们不能直接使用 cin 或 scanf ,因为连接的是“-”
思路:
- string类型输入,提取数字(-‘0’)
- 将每月天数用数组列出来
- 判断闰年,如果是的话,2月天数++
- for循环1月-(mm - 1)月的天数累加,再加上dd
代码在此:
#include <bits/stdc++.h> // 头文件
using namespace std; // 命名空间
int a, b, c; // 年,月,日
int t[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每月天数,口诀:一三五七八十腊,三十一天永不差
int cnt; // 用来统计天数
string s; // 输入的字符串
int main() {
cin >> s;
a = (s[0] - 48) * 1000 + (s[1] - 48) * 100 + (s[2] - 48) * 10 + (s[3] - 48); // 提取年
b = (s[5] - 48) * 10 + (s[6] - 48); // 提取月
c = (s[8] - 48) * 10 + (s[9] - 48); // 提取日
if(a % 4 == 0) if(a % 100 != 0 || a % 400 == 0) // 如果是闰年
t[2]++; // 二月天数+1
for(int i = 1; i <= b - 1; i++) cnt += t[i]; // 统计整月的天数
cnt += c; // 不整月的天数
cout << cnt; // 输出
return 0;
}