AHU_OJ 59

这个题目实际上是计算两个随意给的日期之间的天数.

 

算法:

  这里的算法是算出两个日期离1年1月1日之间的天数,然后相减即可得到二者之间相差的天数.

  判断闰年的宏值得学习,简洁高效.

代码:

#include "stdio.h"
#define LEAP(y) (y%(y%100?4:400)==0)    //闰年的判断宏.好算法
unsigned int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int between_days(int y,int m,int d){
    int i,sum=0,k=0;
    for(i=1;i<y;i++)
        k=k+LEAP(i);            //k表示1年到当前年一共多少个闰年.
    sum=sum+365*(y-1)+k;        //365*倍数加上闰年数等于一共天数.
    months[1]=months[1]+LEAP(y);
    for(i=0;i<m-1;i++)
        sum=sum+months[i];        //计算月的总天数
    sum=sum+d;                    //最后计算天
    return sum;    
}
int main(){
    int total1,total2;
    int y,m,d;
    scanf("%d%d%d",&y,&m,&d);
    total1=between_days(y,m,d);
    scanf("%d%d%d",&y,&m,&d);
    total2=between_days(y,m,d);
    printf("%d",total2-total1);    //年1-年2得到相差天数.
    system("pause");
}

 

posted @ 2014-02-11 01:20  brillliu  阅读(172)  评论(0编辑  收藏  举报