C/C++—有关日期类的OJ题

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:C++学习

小伞的主页:xiaosan_blog

1.计算日期到天数的转换(简单)

计算日期到天数转换__牛客网 (nowcoder.com)​​​​​​

这题主要考察对闰年平年的判断,大家肯定能轻松解决的!!!

#include <stdio.h>

int main() {
    int y, m, d;
    scanf("%d %d %d", &y, &m, &d);
     //判断是否为闰年
    int arr[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (((y % 4 == 0) && (y % 100 != 0)) || y % 400 == 0) {
        arr[1] = 29;

    }//求和
    int sum = 0;
    for (int i = 0; i < m - 1; i++) {
        sum += arr[i];
    }
    sum += d;
    printf("%d", sum);
    return 0;

}

2.日期差值(简单)

日期差值__牛客网 (nowcoder.com)

本题我采用的是年月分别求和(y1为最大值),计算两个的年份的差值(单独计算),求和他们本年的天数,sum求和;

相信大家会有更方便的方法的!!!

#include <stdio.h>

void swap(int* x, int* y) {
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

int main() {
    int y1, m1, d1, y2, m2, d2;
    int arr[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    scanf("%4d%2d%2d", &y1, &m1, &d1);
    scanf("%4d%2d%2d", &y2, &m2, &d2);
    int sum2 = 0;
    int sum1 = 0;
    //因为后面我认为y1为大值,所以在这里判断将y1设置为大值
    if (y1 < y2) {
        swap(&y1, &y2);
        swap(&m1, &m2);
        swap(&d1, &d2);
    }
    if (y1 == y2) {
        if (m1 < m2) {
            swap(&m1, &m2);
            swap(&d1, &d2);
        }
    }
    if (y1 == y2) {
        if (m1 == m2) {
            if (d1 < d2) {
                swap(&d1, &d2);
            }
        }
    }

    //差的年数
    int x = y1 - y2;
    //记录y2年的天数
    if (((y2 % 4 == 0) && (y2 % 100 != 0)) || y2 % 400 == 0) {
        //判断是否为闰年
        arr[1] = 29;
    }
    for (int i = 0; i < m2 - 1; i++) {
        sum2 += arr[i];
    }
    sum2 += d2;
    //记录y1年的天数
    if (((y1 % 4 == 0) && (y1 % 100 != 0)) || y1 % 400 == 0) {
        //判断是否为闰年
        arr[1] = 29;
    }
    for (int i = 0; i < m1 - 1; i++) {
        sum1 += arr[i];
    }
    sum1 += d1;
    for (int i = 0; i < x; i++) {
        if (((y1 % 4 == 0) && (y1 % 100 != 0)) || y1 % 400 == 0) {
            sum1 += 366;
        } else {
            sum1 += 365;
        }
    }
    printf("%d", sum1 - sum2+1);

    return 0;
}

3.日期累加

日期累加__牛客网 (nowcoder.com)

本题主要处理进位的问题,注意本题的打印格式

#include <iostream>
using namespace std;

static int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int main() {
    int n;
    scanf("%d", &n);
    while (n--) {
        int y, m, d, add;
        //将年月日分别取值,以便后续分别处理
        scanf("%4d%2d%2d", &y, &m, &d);
        scanf("%d", &add);
        d += add;//将日相加
        if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
            arr[2] = 29;
        }
        //判断是否超过当月的天数
        while (d > arr[m]) {
            if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
                arr[2] = 29;
            } else {
                arr[2] = 28;
            }
            d -= arr[m];
            m++;
            while (m > 12) {
                m -= 12;
                y++;
            }
        }
        //因为对打印的值有特殊要求,这里需要特殊处理
        if (m > 9)
            if (d > 9) {
                printf("%d-%d-%d\n", y, m, d);
            } 
            else {
                printf("%d-%d-0%d\n", y, m, d);
            } 
        else{ 
           if (d > 9) {
            printf("%d-0%d-%d\n", y, m, d);
           } 
           else {
            printf("%d-0%d-0%d\n", y, m, d);
           }
        }
    }
}
相关推荐
斯派的曼4 分钟前
学习C++的第七天!
开发语言·c++·学习
街 三 仔5 分钟前
【C语言零基础入门篇 - 15】:单链表
c语言·开发语言
苏格拉没有底1115 分钟前
数据结构——顺序表、链表
c语言·开发语言·数据结构·笔记·学习·算法·链表
进击的_鹏7 分钟前
数据结构之顺序表
c语言·数据结构
昭著12 分钟前
优先级队列(堆)
java·数据结构
抓哇能手14 分钟前
王道408考研数据结构-树与二叉树-第五章-第三四节
c语言·数据结构·考研·算法·408
DdddJMs__13514 分钟前
C语言 | Leetcode C语言题解之第429题N叉树的层序遍历
c语言·leetcode·题解
hhhcbw15 分钟前
C++ STL容器(二) —— list 底层剖析
c++·链表·list·msvc·c++容器
Pandaconda23 分钟前
【计算机网络 - 基础问题】每日 3 题(二十三)
开发语言·网络·笔记·后端·计算机网络·面试·职场和发展
Leaf Ye37 分钟前
Android常用C++特性之std::move
c++