题解 | 日期差值

日期差值

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

#include <iostream>
#include <sys/types.h>
using namespace std;

int monthp[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int monthr[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
    int year1, month1, day1;
    int year2, month2, day2;
    int a, b;
    while (cin >> a >> b) {
        if (a > b) {
            int temp = a;
            a = b;
            b = a;
        }
        year1 = a / 10000;
        month1 = (a % 10000) / 100;
        day1 = a % 100;

        year2 = b / 10000;
        month2 = (b % 10000) / 100;
        day2 = b % 100;
        int sub = 1;//差值
        int find = 0;//处理sub
        int find1=0;//处理pre
        int pre=0;//第一个日期,当年已经经过多少天
        if ((year1 % 4 == 0 && year1 % 100 != 0) || year1 % 400 == 0)
                for (int i = 1; i <= month1 && find1 == 0; i++)
                    for (int j = 1; j <= monthr[i] && find1 == 0; j++)
                        if (!(i == month1 &&j == day1)) 
                            pre++;
                         else find1 = 1;
            else
                for (int i = 1; i <= month1 && find1 == 0; i++)
                    for (int j = 1; j <= monthp[i] && find1 == 0; j++)
                        if (!(i == month1 &&j == day1)) 
                            pre++;
                         else find1 = 1;
       //以上旨在计算日期1当年,达到目标月日之前还经过多少天,如一月一就是经过0天,一月二就是过了一天
        for (; year1 <= year2; year1++) {
            if ((year1 % 4 == 0 && year1 % 100 != 0) || year1 % 400 == 0)
                for (int i = 1; i <= 12 && find == 0; i++)
                    for (int j = 1; j <= monthr[i] && find == 0; j++)
                        if (!(year1 == year2 && i == month2 &&j == day2)) 
                            sub++;
                         else find = 1;
            else
                for (int i = 1; i <= 12 && find == 0; i++)
                    for (int j = 1; j <= monthp[i] && find == 0; j++)
                        if (!(year1 == year2 && i == month2 &&j == day2)) 
                            sub++;
                         else find = 1;
        }
       //以上是从日期1的年份的一月一日算起,每加一天,差值++,直到年月日都与日期2相等
       //因为是从一月一算起,所以还需要减去当年从一月一到目标月日已经经过的天数
        cout<<sub-pre<<endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

03-31 21:47
东南大学 C++
彭于晏前来求offe...:吓晕了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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