题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5
刚开始没加换行符,没过,折腾了半天,汗死了
题解
#include<stdio.h>
#include<stdlib.h>
int isrun(int x){
if((x%4==0&&x%100!=0)||x%400==0)
return 1;
else
return 0;
}
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b)){
int n1,n2;
int temp;
if(a<b){
temp=b;
b=a;
a=temp;//始终令n1保持最大
}
n1=a/10000;
n2=b/10000;//年
int mon[12][2]={{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
int y1,y2;
y1=a%10000/100;
y2=b%10000/100;//月
int t1,t2;
t1=(a%10000)%100;//天
t2=(b%10000)%100;
int day=0,day1=0,day2=0;
int some=0;
for(int i=0; i < n1 ;i++ ){
for(int j=0;j<12;j++){
day1+=mon[j][isrun(i)];
}
}
for(int i= 0;i<y1-1;i++){
day1+=mon[i][isrun(n1)];
}
day1+=t1;
//从0到n1的时间;
for(int i=0; i < n2 ;i++ ){
for(int j=0;j<12;j++){
day2+=mon[j][isrun(i)];
}
}
for(int i= 0;i<y2-1;i++){
day2+=mon[i][isrun(n2)];
}
day2+=t2;
//从0到n2的时间;
day=day1-day2+1;
printf("%d\n",day);
}
return 0;
}