题解 | #日期差值#

日期差值

https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c

#include <iostream>
using namespace std;

int daysTable[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
bool isLeapYear(int year) {
    if (year % 4 == 0 && year % 100 != 0) return true;
    if (year % 400 == 0) return true;
    return false;
}
int pastDaysOfAYear(int year, int month, int day) {
    int ans = 0;
    for (int i = 1; i < month; i++) {
        ans += daysTable[isLeapYear( year)][i];
    }
    ans += day;
    return ans;
}
int main() {
    int a, b;
    while (cin >> a >> b) { // 注意 while 处理多个 case
        // cout << a + b << endl;
        int a_year = a / 10000;
        int a_month = (a % 10000) / 100;
        int a_day = a % 100;
        int b_year = b / 10000;
        int b_month = (b % 10000) / 100;
        int b_day = b % 100;
        int range = 0;
        for (int i = a_year; i < b_year; i++) {
            if (isLeapYear(i)) range += 366;
            else range += 365;
        }
        range -= pastDaysOfAYear(a_year, a_month,  a_day);
        range += pastDaysOfAYear(b_year, b_month, b_day);
        cout << range + 1 << endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
07-04 09:21
已编辑
Java
推拿大师:这是hr发的钓鱼贴吗
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务