1. 程式人生 > >日期差值

日期差值

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

int
dayOfMonth[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語言結構體定義的幾種方法

日期差值