AcWing 3498. 日期差值
原题链接
简单
作者:
Pobz
,
2023-01-17 18:36:52
,
所有人可见
,
阅读 1150
复旦大学2019年机试类似题目
#include<bits/stdc++.h>
using namespace std;
//存储每月的天数求出来
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//从a[1]开始存
//差分思想
int days(int x)//days函数用于计算到0000/00/00的天数
{
int n = x / 10000;//年
int y = x % 10000 / 100;//月
int r = x % 10000 % 100;//日
//首先更新一下计算年份的二月天数有多少
//闰年包括普通闰年和世纪闰年
//普通闰年年分是4倍数不是100倍数(),世纪闰年是400的倍数,
//即100的倍数不是4的倍数不是闰年,如1900
//判断闰年
if(n % 4 == 0 && n % 100 != 0||n % 400 == 0)
a[2]=29;
else //不加这个会错
a[2]=28;
// a[2] = ( n % 4 == 0 && n % 100 != 0 || n % 400 == 0 ? 29 : 28);//等价写法
//统计当前年份的总天数
while(y --) r += a[y];//把每个月的天数相加,注意初值为把未满一月的天数
//计算从公元1年开始开始,一直到去年最后一天,不是到0000年
while(n --) r += (n % 4 == 0 && n % 100 != 0||n % 400 == 0 ? 366 : 365);//闰年366天,平年365天
return r;//返回一共的天数
}
int main()
{
int a,b;
while(cin >> a >> b)
cout<< abs( days(a) - days(b) )+1 << endl;
//注意需要加一,相邻的两天日期相差1,天数相差2
}
Orz
为什么判断2月天数的时候不加上else a[2]=28会报错呢
假如某年是闰年二月就是29天了,那下一年是闰年吗?不是的话是不是得改回来?