KY110 日期差值
⭐️难度:中等(其实简单)
⭐️类型:模拟
📖题目:题目链接
📚题解:
思路:
1、主要问题在处理输入数据,提取出年月日。
2、利用好NextDay函数。
#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_multisetusingnamespacestd;voidNextDay(int&year,int&month,int&day){intdayOfMonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};intisLeap;// 是否是闰年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++;}}intmain(){intdate1=0;intdate2=0;while(scanf("%d %d",&date1,&date2)!=EOF){intyear1=date1/10000;intyear2=date2/10000;intmonth1=date1/100%100;intmonth2=date2/100%100;intday1=date1%100;intday2=date2%100;intres=1;while(year1!=year2||month1!=month2||day1!=day2){NextDay(year1,month1,day1);res++;}printf("%d\n",res);}return0;}答案:
#include<stdio.h>#include<string.h>usingnamespacestd;voidNextDay(int&year,int&month,int&day){// & 出现在定义or形参当中 表示引用的意思 出现在其他位置,表示取地址// 存储一下 月份和天数的对应关系intdayOfMonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};intisLeap;// 是否是闰年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);}voidSwap(int&lhs,int&rhs){inttmp=lhs;lhs=rhs;rhs=tmp;}intmain(){intdate1,date2;while(scanf("%d%d",&date1,&date2)!=EOF){intyear1=date1/10000;intyear2=date2/10000;intmon1=date1/100%100;intmon2=date2/100%100;intday1=date1%100;intday2=date2%100;if(year2<year1||year2==year1&&mon2<mon1||year2==year1&&mon2==mon1&&day2<day1){Swap(year2,year1);Swap(mon2,mon1);Swap(day2,day1);}intdays=1;while(1){if(year1==year2&&mon1==mon2&&day1==day2){break;}NextDay(year1,mon1,day1);++days;}printf("%d\n",days);}return0;}