时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:5143
解决:1789
- 题目描述:
-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
- 输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
- 输出:
-
每组数据输出一行,即日期差值
- 样例输入:
-
20110412 20110422
- 样例输出:
-
11
#include<stdio.h> #include<string.h> #include<stdlib.h> int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int isLeapYear(int y) { if((y%4==0&&y%100!=0)||y%400==0)return 1; return 0; } int getdays(int y,int m,int d,int flag) { int result=0; if(isLeapYear(y)) { months[2]+=1; int i=1; while(i<m){ result+=months[i]; i++; } result+=d; months[2]-=1; if(flag==0) { return 366-result+1; } else return result; } int i=1; while(i<m){ result+=months[i]; i++; } result+=d; if(flag==0) { return 365-result+1; } else return result; } int main(int argc, char *argv[]) { int y1,m1,d1,y2,m2,d2; char s1[10]; char s2[10]; char t[10]; while(~scanf("%s%s",s1,s2)) { strncpy(t,s1,4); t[4]='\0'; y1=atoi(t); strncpy(t,s1+4,2); t[2]='\0'; m1=atoi(t); strncpy(t,s1+6,2); t[2]='\0'; d1=atoi(t); strncpy(t,s2,4); t[4]='\0'; y2=atoi(t); strncpy(t,s2+4,2); t[2]='\0'; m2=atoi(t); strncpy(t,s2+6,2); t[2]='\0'; d2=atoi(t); //printf("%d %d %d ---- %d %d %d\n",y1,m1,d1,y2,m2,d2); if(y1!=y2) { int re=getdays(y1 , m1 , d1 , 0); for(int i=y1+1;i<y2;++i) { if(isLeapYear(i)) re+=366; else re+=365; } re+=getdays(y2, m2 , d2 ,1); printf("%d\n",re); } else printf("%d\n",getdays(y2 , m2 , d2 , 1)-getdays(y1 , m1 , d1 , 1)+1); } return 0; } /************************************************************** Problem: 1096 User: kirchhoff Language: C Result: Accepted Time:0 ms Memory:920 kb ****************************************************************/
时间: 2024-10-12 17:17:30