算法1
日期问题题解大合集
这里注释全在代码里,具体思路可以在上面找
参考文献
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//把每月的天数求出来
int day(int n)
{
int y=n/10000;//年
int m=n%10000/100;//月
int d=n%10000%100;//日
//
a[2]=(y%4==0&&y%100!=0||y%400==0?29:28);//判断闰年
while(m--)d+=a[m];//把每个月的天数相加
//以上都是在累加今年的天数,下面给出从耶稣诞生日(公元一年)开始,一直到去年最后一天
while(y--)d+=(y%4==0&&y%100!=0||y%400==0?366:365);//闰年366天,平年365天
return d;//返回一共的天数
}
int main()
{
int a,b;
while(cin>>a>>b)cout<<abs(day(a)-day(b))+1<<endl;//由题所示“如果两个日期是连续的我们规定他们之间的天数为两天”,因此我们加一
}
while(m–)和while(y–)是不是多算了一个月和一年啊
同问
是多算了,但不影响结果,使用–m和–y可能好一点
为什么不会影响啊,两个日期多算的一定能抵消吗??
哦我懂了都多加了0月和第0年okok
没多算,进入循环之后,m就等于m-1了
我知道但是加了相同的东西的使用不影响结果的
%%%
Or2
orz
很混乱
为什么过不了,抄的
#include [HTML_REMOVED]
using namespace std;
int c[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int days(int n)
{
int y=n/10000;
int m=n%10000/100;
int d=n%10000%100;
c[2]=(y%4==0&&y%100!=0||y%400==0 ? 29:28);
while(m–)d+=c[m];
while(y–)d+=(y%4==0 && y%100!=0||y%400==0?366:355);
return d;
}
int main()
{
int a,b;
while(cin>>a>>b)cout<<std::abs(days(a)-days(b))+1<<endl;
return 0;
}
是366,365,不是355
谢谢,我用代码检查工具对比出来了,话说我咋抄都能抄错,有点搞心态
有时候根本就不会注意到这种小地方
### 感谢分享
这方法太神了 思路清晰
orz
%%%