关于在计算日期差值时遇到的时间超限问题

遇到的问题

这是计算日期差值的代码,思路是从小日期累加到大日期,用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;
}
运行结果

img

不应该啊,怎么会耗时3秒之多。循环次数都一样啊