當前位置:編程學習大全網 - 編程語言 - C語言編程:定義壹個結構體用於存儲年、月、日數據,並定義壹個函數用於求兩個日期之間的天數。

C語言編程:定義壹個結構體用於存儲年、月、日數據,並定義壹個函數用於求兩個日期之間的天數。

#include?<stdio.h>

const?int?days[13]?=?{0,?31,?28,?31,?30,?31,?30,?31,?31,?30,?31,?30,?31};

struct?Date

{

int?year,?month,?day;

};

int?DateCmp(Date?a,?Date?b)

{

if?(a.year?!=?b.year)

return?a.year?>?b.year;

if?(b.month?!=?a.month)

return?a.month?>?b.month;

return?a.day?>?b.day;

}

int?isLunar(int?year)

{

return?year?%?400?==?0?||?(year?%?100?&&?year?%?4?==?0);

}

int?DateDistace(Date?a,?Date?b)

{

if?(DateCmp(a,?b))//保證a小於b

{

Date?t?=?b;

b?=?a;

a?=?t;

}

//計算結果存儲在res中

//首先計算相差的年

int?i?=?a.year?+?1,?j?=?b.year?-?1,?res?=?a.year?==?b.year0?:?(j?-?i?+?1)?*?365;

for?(int?ii?=?(i?+?3)?/?4?*?4,?jj?=?j?/?4?*?4;ii?<=?jj;ii?+=?4,?res++);

for?(int?ii?=?(i?+?99)?/?100?*?100,?jj?=?j?/?100?*?100;ii?<=?jj;ii?+=?100,?res--);

for?(int?ii?=?(i?+?399)?/?400?*?400,?jj?=?j?/?400?*?400;ii?<=?jj;ii?+=?400,?res++);

//然後計算相差的月

if?(a.year?!=?b.year)

{

for?(int?ii?=?a.month?+?1;ii?<=?12;ii++)

res?+=?ii?==?228?+?isLunar(a.year)?:?days[ii];

for?(int?ii?=?1;ii?<=?b.month?-?1;ii++)

res?+=?ii?==?228?+?isLunar(b.year)?:?days[ii];

}

else

{

for?(int?ii?=?a.month?+?1;ii?<?b.month;ii++)

res?+=?ii?==?228?+?isLunar(a.year)?:?days[ii];

}

//最後計算相差的日

if?(a.year?!=?b.year?||?a.month?!=?b.month)

{

res?+=?(a.month?==?228?+?isLunar(a.year)?:?days[a.month])?-?a.day?+?b.day;

}

else

{

res?+=?b.day?-?a.day;

}

return?res;

}

int?main()

{

Date?a,?b;

a.year?=?2000;?a.month?=?12;?a.day?=?31;

b.year?=?1000;?b.month?=?1;?b.day?=?1;

printf("%d\n",?DateDistace(b,?a));

return?0;

}

  • 上一篇:公司拓展活動遊戲文案
  • 下一篇:綠色發光二極管發橙光之迷
  • copyright 2024編程學習大全網