这是计算日期差值的代码,思路是从小日期累加到大日期,用sum来记录这个过程
但在运行的时候发现int month[2][13]会使代码超限,而int month[13][2]不会,这是为什么?
#include <cstdio>
/* 这个会使得超限
int month[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
*/
int month[13][2]={//平年和闰年的天数
{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},
{30,30},{31,31},{30,30},{31,31}
};
bool isLeap(int y){//判断是否是闰年
return (y%4==0 && y%100 != 0 )||(y%400==0);
}
int main(){
int s1,s2;
int y1, y2, m1, m2, d1, d2;
while(scanf("%d%d",&s1,&s2)!=EOF){
if(s1 > s2){
int temp = s1;
s1 = s2;
s2 = temp;
}
y1 = s1/10000;
m1 = s1%10000/100;
d1 = s1%100;
y2 = s2/10000;
m2 = s2%10000/100;
d2 = s2%100;
int sum = 1;//初始化结果,相差天数
//要求出来时两个日期都相等
while((y1<y2) || (m1 < m2) || (d1 < d2)){//第一个日期没有达到第二个日期时循环
d1++;//天数加一
if(d1 == month[m1][isLeap(y1)]+1){//满当月天数
m1++;//日期变为下个月的一号
d1=1;
}
if(m1==13){//月份满十二个月
y1++;//日期变为下一年的一月
m1=1;
}
sum++;//相差天数+1
}
printf("%d\n",sum);
}
return 0;
}
不应该啊,怎么会耗时3秒之多。循环次数都一样啊