• C/C++算法入门 | 日期处理


    不爱生姜不吃醋⭐️
    如果本文有什么错误的话欢迎在评论区中指正
    与其明天开始,不如现在行动!


    🌴前言

    日期处理的问题总是会让很多人感到头疼,因为在这种问题中,总是会需要处理平年和闰年(由此产生的二月的天数区别)、大月和小月的问题,因此细节比较繁杂,但是只要细心处理细节,一般都能很好的解决这类问题。


    🌴日期处理

    1.题目(codeup 1928)

    题目描述

    有两个日期,求两个日期之间的天数,如果两个日期是连续的,则规定他们之间的天数为两天。

    输入格式

    有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

    输出格式

    每组数据输出一行,即日期差值。

    输入样例

    20130101
    20130105

    输出样例

    5

    2.思路

    1. 首先要先定义大月小月,还要判断是否为闰年
    2. 用三个变量将输入的日期分为年月日的形式
    3. 定义一个计数器,用小的日期每天加一直到日期一和日期二相同
    4. 计数器的数字就是像相差的天数

    3.代码实现

    #include 
    
    int month[13][2] = {
        {0, 0},
        {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30},
        {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}
    };
    bool isLeap(int year){
        return ((year % 4 == 0) && (year % 100 == 0)) || (year % 400 == 0);
    }
    
     int main() {
        int date1, year1, month1, day1;
        int date2, year2, month2, day2;
    
        scanf("%d%d", &date1, &date2);
    
        if (date1 > date2) {
            int temp = date1;
            date1 = date2;
            date2 = temp;
        }
    
        year1 = date1 / 10000, month1 = date1 % 10000 / 100, day1 = date1 % 100;
        year2 = date2 / 10000, month2 = date2 % 10000 / 100, day2 = date2 % 100;
        
        int count = 1;
        while (year1 < year2 || month1 < month2 || day1 < day2)
        {
            day1++;
            if (day1 == month[month1][isLeap(year1)] + 1){
                month1++;
                day1 = 1;
            }
    
            if(month1 == 13){
                year1++;
                month1 = 1;
            }
            count++;
        }
    
        printf("%d", count);
    
        return 0;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    🌴总结

    文章中代码的编写使用的都是C/C++基础知识,多加练习熟能生巧。
    本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


  • 相关阅读:
    网络安全——DNS域传送漏洞
    加密原生消费产品的未来:Web3 数字身份如何发挥实际作用
    Springboot集成RabbitMQ【消费者接收消息的确认】
    TechSmith Camtasia Studio 23.3.2.49471 Crack
    第2章 Java基础
    《Head First HTML5 javascript》第9章 认识对象
    Java注解和反射
    Linux常见命令总结
    js(javascript)中页面跳转和窗口关闭等操作
    WEB网站安全检测系统设计与实现
  • 原文地址:https://blog.csdn.net/weixin_54620350/article/details/133106284