日期差值
阿新 • • 發佈:2018-03-05
efi 問題 span mmd day tle .com 是我 int
描述:有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天
輸入:有多組數據,每組數據有兩行,分別表示兩個日期,形式為YYYYMMDD
輸出:每組數據輸出一行,即日期差值
樣例輸入:
20110412
20110422
樣例輸出:
11
(這個代碼是根據王道機試上的答案改編的,實際上並沒能運行出來,編譯沒有問題,但while處空間?太大了)
#include <stdio.h> #include <stdlib.h> #define ISYEAR(x) x % 100 !=0 && x % 4 == 0 || x % 400 == 0 ? 1: 0 intdayOfMonth[13][2]={ 0,0, 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 buf[5001][13][32]; int Abs(int x){ return x < 0 ? -x : x; } void nextDay(int Day, int Month,int Year){ Day++; if(Day>dayOfMonth[Month][ISYEAR(Year)]){ Day= 1; Month ++; if(Month > 12){ Month = 1; Year ++; } } } struct Date{ int Day; int Month; int Year; }; struct Date date; int main() { int count = 0; date.Day=1; date.Month=1; date.Year=0; while(date.Year!=5001){ buf[date.Year][date.Month][date.Day]= count; nextDay(date.Year,date.Month,date.Day); count++; } int d1,m1,y1; int d2,m2,y2; scanf("%4d%2d%2d",&y1,&m1,&d1); scanf("%4d%2d%2d",&y2,&m2,&d2); count = Abs(buf[y2][m2][d2]-buf[y1][m1][d1]); printf("%d\n",count); return 0; }
總結:上面有幾個地方我覺得適合學習一下,首先是宏判斷進行判斷閏年,實際上也可以用函數進行,包括dayofMonth也可以成為一個一維數組而不是二維數組;
實際上之前struct裏面有函數的,但後來報錯,我就拿出來了,但本來是應該運行ok的,這種用法也很是我以前沒這麽使用過的。
struct Date{ int Day; int Month; int Year; void nextDay(){ Day++; if(Day>dayOfMonth[Month][ISYEAR(Year)]){ Day = 1; Month ++; if(Month > 12){ Month = 1; Year ++; } } } };
要註意一個問題,C語言和c++裏的struct使用是不大一樣的,C語言在聲明變量時是一定要在前面寫struct的,例如
struct student{ ... }; struct student stu1; //struct不可省略
c++可以省略:
struct student{ ... }; student stu1; //struct可省略
具體C語言的結構體定義看文章:C語言結構體定義的幾種方法
日期差值