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

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

文章目录

  • 前言
  • 日期处理
    • 1.题目(codeup 1928)
    • 2.思路
    • 3.代码实现
  • 总结


前言

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


日期处理

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;
 }

总结

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


你可能感兴趣的:(C/C++算法,c语言,c++,算法)