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