自学内容网 自学内容网

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

原文地址:https://blog.csdn.net/Asuku_/article/details/142576890

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!