思路:求日期相差天数的话,就让少的那个一直加一天 加到多的那个天数为止。
具体处理:天数d加了一天后超过当前月m应有的天数时,令月份m+1;别忘了置天数为1号。
月份m变成13时,令年份y加1 同时设置月份m为1月。
***闰年和平年的二月份天数不一样,所以要用二维数组存一下每个月的天数***、
设定二维数组int month【13】【2】 第二维为0时表示平年,为1时表示闰年(这个二维数组可以设置在main方法前)
直接把第一个日期的年份不断加1,加到第二个日期的年份-1为止(-1是为了防止加过了),根据平年,闰年来累加是365天,366天。(啊 判断闰年也好多判断啊(╥╯^╰╥))**把判断闰年的方法单独写一个方法,引用即可。
判断闰年的条件:能整除4且不能整除一百或 能整除400 (year%4==0&&year%100!=0)||(year%400==0)
#include <cstdio>
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}
};
//这里数组的第一行要和月份对齐 【1】是一月
bool isLeap(int year){
return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
int t1,y1,m1,d1;
int t2,y2,m2,d2;
scanf("%d%d",&t1,&t2);
if(t1>t2){
int temp=t1;
t1 = t2;
t2 = temp;
}
y1 = t1/10000;
y2 = t2/10000;
m1 = t1%10000/100;
m2 = t2%10000/100;
d1 = t1%100;
d2 = t2%100;
int ans =1;
while((y2>y1)||(m2>m1)||(d2>d1)){
d1++;
if(d1 ==month[m1][isLeap(y1)] +1){
m1++;
d1=1;
}
if(m1==13){
y1++;
m1=1;
}
ans++;
}
printf("%d\n",ans);
return 0;
}
这个题 我写了一天呐,细节太多。。嘤