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);
           }
        }
    }
}
相关推荐
爱吃喵的鲤鱼8 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
懒惰才能让科技进步30 分钟前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
DARLING Zero two♡34 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
7年老菜鸡35 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Ni-Guvara44 分钟前
函数对象笔记
c++·算法
似霰1 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭1 小时前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风1 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵1 小时前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier