(算日期的題目都好麻煩....把我的解法分享,希望能幫到其他同樣抓狂的人)
解法:
首先,我是參考這份講義中提供的想法(章節3.3.2),把從西元元年到所求日期的總天數分別加起來後,相減即是答案。
判斷閏年照定義做。
計算天數的詳細流程:
1.先算出從元年到(y-1)年的天數。全當作平年計算是因為相減後會相消,不影響。
2.再來找出有幾個閏年。因為閏年比平年天數多1,所以求出有n個閏年則總天數多n。
3.再計算第y年的天數。先算m個月的天數,如果超過二月且當年是閏年則多加1。然後加上d。
其他就很簡單了。
程式碼:AC (4ms, 64KB)
#include <stdio.h> int isleap(int year) { if((year%400==0)||((year%100!=0)&&(year%4==0))) return 1; return 0; } int countdaysum(int y,int m,int d) { int dayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int sum=(y-1)*365; sum+=(y-1)/4; sum-=(y-1)/100; sum+=(y-1)/400; for(int i=1;i<m;i++) sum+=dayofmonth[i]; if(m>2&&isleap(y)) sum++; sum+=d; return sum; } int main() { int y1,m1,d1,y2,m2,d2; while(scanf("%d %d %d %d %d %d",&y1,&m1,&d1,&y2,&m2,&d2)!=EOF) { int sum1,sum2; sum1=countdaysum(y1,m1,d1); sum2=countdaysum(y2,m2,d2); if(sum1>sum2) printf("%d\n",sum1-sum2); else printf("%d\n",sum2-sum1); } return 0; }
沒有留言:
張貼留言