(算日期的題目都好麻煩....把我的解法分享,希望能幫到其他同樣抓狂的人)
解法:
首先,我是參考這份講義中提供的想法(章節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;
}
沒有留言:
張貼留言