题目描述:
-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
-
输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
-
输出:
-
每组数据输出一行,即日期差值
-
样例输入:
-
20110412 20110422
-
样例输出:
-
11
题目分析:
这是交大09年的机试题,属于日期处理类型简单题。
对于输入,可以取巧输入2个整数,避免输入字符串后的复杂处理。
可自己手写一个简单的leap()函数判断闰年。
计算出起始年1月1日至起始日期的天数sum1,
再计算出起始年1月1日至最终日期的天数sum2,
则sum2 - sum1 + 1即为所求。
源代码:
#include <stdio.h> #include <stdlib.h> bool leap(int year) { if((year%4==0 && year%100!=0) || year%400==0) return 1; else return 0; } int main() { int month[2][13] ={ {0, 31, 28, 31,30, 31, 30, 31, 31, 30, 31, 30, 31},{0, 31, 29, 31,30, 31, 30, 31, 31, 30, 31, 30, 31}}; // 每月的天数 int year[2] = {365, 366}; // 平年/闰年天数 int start, end; while(scanf("%d%d", &start, &end)!=EOF) //读入年月日 { int year1 = start/10000; //计算起始年月日 int month1 = (start%10000)/100; int day1 = start%100; int year2 = end/10000; //计算最终年月日 int month2 = (end%10000)/100; int day2 = end%100; int i, j; int sum1 = day1; for(i=1; i<month1; i++) sum1 += month[leap(year1)][i]; //计算sum1 int sum2 = day2; for(i=1; i<month2; i++) sum2 += month[leap(year2)][i]; for(j=year1; j<year2; j++) sum2 += year[leap(j)]; //计算sum2 printf("%d\n", sum2 - sum1 + 1); } //system("pause"); return 0; } /************************************************************** Problem: 1096 User: superlc320 Language: C++ Result: Accepted Time:0 ms Memory:1020 kb ****************************************************************/
-