LeetCode 1360. 日期之间隔几天
原题链接
简单
作者:
noobcoder
,
2020-03-06 16:44:58
,
所有人可见
,
阅读 761
/**
用C语言写的简单模拟+前缀和的思想
例如:
1971.1.1->2019.6.29
1971.1.1 -> 2018.12.31 //一年一年的算
2018.12.31 -> 2019.5.31 //一月一月的算
2019.5.31 -> 2019.6.29 //一天一天的算
注意格式的输入输出
*/
int is_leap(int y){///闰年的判断
return y%100!=0&&y%4==0||y%400==0;
}
int mouths[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};///预处理月份数组
int getdate(char *date){
int y,m,d,res=0;
int i;
sscanf(date,"%d-%d-%d",&y,&m,&d);//字符串输入
for(i=1970;i<y;i++){///循环年份,注意一定是从1970年开始
if(is_leap(i)) res+=366;//如果是闰年就要加上366
else res += 365;///不是闰年加上365
}
for(i=1;i<m;i++){///循环月份
res += mouths[i];
if (i==2&&is_leap(y)) res += 1;///特判,如果是闰年的2月就要在28天的基础上再加1天
}
res += d;///加上剩余的天数
return res;///返回当前日期与1970年相差的天数
}
int daysBetweenDates(char * date1, char * date2){
return abs(getdate(date1)-getdate(date2));///前缀和的思想
}
其实也可以定义一个结构体哦~