题解 | #日期差值#

日期差值

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

#include <iostream>
using namespace std;

const int year1[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
const int year2[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
const int days1 = 365;
const int days2 = 366;


int getYear(int date){
    return date / 10000;
}

int getMonth(int date){
    return (date - 10000 * getYear(date)) / 100;
}

int getDay(int date){
    return date - getYear(date)*10000 - getMonth(date) * 100;
}

int getSum(int date){
    int y = getYear(date);
    int m = getMonth(date);
    int d = getDay(date);
    int ret = 0;
    if((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)){
        for(int i = 1;i<m;i++){
            ret += year2[i - 1];
        }
    }else{
        for(int i = 1;i<m;i++){
            ret += year1[i - 1];
        }
    }
    return ret + d;
}

int get_diff(int date1,int date2){
    int y1 = getYear(date1);
    int y2 = getYear(date2);
    int m1 = getMonth(date1);
    int m2 = getMonth(date2);
    int d1 = getDay(date1);
    int d2 = getDay(date2);


    int ret = 0;
    if(y1 < y2){
        //先加上今年剩余的天数
         if((y1 % 400 == 0) || (y1 % 4 == 0 && y1 % 100 != 0)) ret += (366 - getSum(date1) + 1);
         else ret += (365 - getSum(date1) + 1);
         y1++;
    }else{
        if(m1 < m2){
            if((y1 % 400 == 0) || (y1 % 4 == 0 && y1 % 100 != 0)) ret += (year2[m1 - 1] - d1 + 1);
            else ret += (year1[m1 - 1] - d1 + 1);
            m1++;
        }else{
            return d2 - d1 + 1;
        }
        while(m1 < m2){
            if((y1 % 400 == 0) || (y1 % 4 == 0 && y1 % 100 != 0)){
                ret += year2[m1 - 1];
            }else{
                ret += year1[m1 - 1];
            }
            m1++; 
        }
        return ret + d2;
    }
    while(y1 < y2){
        if((y1 % 400 == 0) || (y1 % 4 == 0 && y1 % 100 != 0)) ret += 366;
        else ret += 365;
        y1++;
    }
    return ret + getSum(date2);
}


int main() {
    int a, b;
    while (cin >> a >> b) { // 注意 while 处理多个 case
        if(a > b) cout << get_diff(b, a) << endl;
        cout << get_diff(a, b) << endl;
    }
    return 0;
}

全部评论

相关推荐

06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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