##问题A 日期差值
题目链接来源codeup
计算两个日期的相邻时间
注意坑点:
- 闰年的判断,4,100,400;
- 如果统一到距离00010101的日期,注意当前年是闰年时,算月份和日期时考虑2月29。
AC 代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int c2n(char c){
return int(c)-48;
}
int t2n(char t[]){
//输入8位字符串的日期,列如20190630
//输出距离00010101的天数
int yy,mm,dd;
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
yy=(((c2n(t[0])*10+c2n(t[1]))*10+c2n(t[2]))*10+c2n(t[3]));
mm=c2n(t[4])*10+c2n(t[5]);
dd=c2n(t[6])*10+c2n(t[7]);
//to 00010101
int sum=0;
for(int i=1;i<yy;i++){
if((i%400==0)||((i%100!=0&&i%4==0))){
sum+=366;
}
else sum+=365;
}
for(int j=1;j<mm;j++){
if(j==2){
if((yy%400==0)||((yy%100!=0&&yy%4==0))){
sum+=1;
}//算月份的时候当前年是闰年要考虑2月+1
}
sum+=month[j-1];
}
sum+=dd;
return sum;
}
int main(){
char a[9];
char b[9];
while(scanf("%s",a)!=EOF){
scanf("%s",b);
int timea=t2n(a);
int timeb=t2n(b);
printf("%d\n",abs(timea-timeb)+1);
}
}