KY110 日期差值

KY110 日期差值

⭐️难度:中等(其实简单)

⭐️类型:模拟

📖题目:题目链接

📚题解:

思路:

1、主要问题在处理输入数据,提取出年月日。

2、利用好NextDay函数。

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<vector>  // vector不需要.h
#include<list>
#include<set>  // // 可以用 set 和 multiset
#include<unordered_set> // 可以用 unordered_set 和 unordered_multiset

using namespace std;

void NextDay(int& year, int& month, int& day) {
    int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int isLeap;  // 是否是闰年
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {  // 闰年二月29天
        dayOfMonth[2] = 29;
    }
    day++;
    if (day > dayOfMonth[month]) {
        day = 1;
        month++;
    }
    if (month > 12) {
        month = 1;
        year++;
    }
}

int main() {
    int date1 = 0;
    int date2 = 0;

    while (scanf("%d %d", &date1, &date2) != EOF) {
        int year1 = date1 / 10000;
        int year2 = date2 / 10000;
        int month1 = date1 / 100 % 100;
        int month2 = date2 / 100 % 100;
        int day1 = date1 % 100;
        int day2 = date2 % 100;

        int res = 1;
        while (year1 != year2 || month1 != month2 || day1 != day2) {
            NextDay(year1, month1, day1);
            res++;
        }

        printf("%d\n", res);
    }
    return 0;
}

答案:

cpp 复制代码
#include <stdio.h>
#include <string.h>
using namespace std;
void NextDay(int &year, int &month, int &day) {
    // & 出现在定义or形参当中 表示引用的意思 出现在其他位置,表示取地址
    // 存储一下 月份和天数的对应关系
    int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int isLeap; // 是否是闰年 
    isLeap = year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
    if (isLeap) {
        dayOfMonth[2] = 29;
    }
    else {
        dayOfMonth[2] = 28;
    }

    ++day;
    if (day > dayOfMonth[month]) {
        day = 1;
        ++month;
    }
    if (month > 12) {
        month = 1;
        ++year;
    }
    //printf("NextDay year = %d, month = %d, day = %d\n", year, month, day);
}
void Swap(int& lhs, int& rhs) {
    int tmp = lhs;
    lhs = rhs;
    rhs = tmp;
}
int main() {
    int date1, date2;
    while (scanf("%d%d", &date1, &date2) != EOF) {
        int year1 = date1 / 10000;
        int year2 = date2 / 10000;
        int mon1 = date1 / 100 % 100;
        int mon2 = date2 / 100 % 100;
        int day1 = date1 % 100;
        int day2 = date2 % 100;

        if (year2 < year1 ||
            year2 == year1 && mon2 < mon1 ||
            year2 == year1 && mon2 == mon1 && day2 < day1) {
            Swap(year2, year1);
            Swap(mon2, mon1);
            Swap(day2, day1);
        }

        int days = 1;
        while (1) {
            if (year1 == year2 && mon1 == mon2 && day1 == day2) {
                break;
            }
            NextDay(year1, mon1, day1);
            ++days;
        }
        printf("%d\n", days);
    }
    return 0;
}
相关推荐
码农幻想梦1 天前
3426. 糖果分享游戏
模拟
码农幻想梦3 天前
KY24 剩下的树
模拟
ygklwyf3 天前
JPRS编程竞赛2026#1(AtCoder初学者竞赛442)
c++·算法·模拟
码农幻想梦5 天前
KY221 打印日期
开发语言·模拟
码农幻想梦5 天前
KY257 日期累加
模拟
Tisfy6 天前
LeetCode 3507.移除最小数对使数组有序 I:纯模拟
算法·leetcode·题解·模拟·数组
码农幻想梦6 天前
KY18 今年的第几天?
模拟
码农幻想梦7 天前
杭电-叠筐问题
模拟
闻缺陷则喜何志丹7 天前
【模拟】P9670 [ICPC 2022 Jinan R] Frozen Scoreboard|普及+
c++·算法·模拟·洛谷