您的位置:首页 > 其它

计算从出生到现在活了多少天

2013-09-18 21:00 429 查看
C语言写的,switch计算部分采用了一本狂人C书的类似写法,感觉很有创意。

#include <stdio.h>

typedef struct
{
int year;
int month;
int day;
}Date;

int date_minus(Date *now,Date *birth);
int numOfYear(Date *date);
int isLeapYear(int year);

int main(void)
{
Date birth={1993,4,4};
Date now={2013,9,17};
printf("%d\n",date_minus(&now,&birth));
return 0;
}

int date_minus(Date *now,Date *birth)
{

int days;
int year;

if(now->year==birth->year)    //同一年的情况
return numOfYear(now)-numOfYear(birth)+1;
else if(now->year<birth->year)
return -1;

//出生年的后几天
days=(isLeapYear(birth->year)?366:365)-numOfYear(birth)+1;

//中间年
for(year=birth->year+1;year < now->year;year++)
days+=isLeapYear(year)?366:365;

//今年的前几天
return days+numOfYear(now);
}

//一年中的第几天
int numOfYear(Date *date)
{
int days=date->day;
switch(date->month-1)
{
case 11:days+=30;
case 10:days+=31;
case 9:days+=30;
case 8:days+=31;
case 7:days+=31;
case 6:days+=30;
case 5:days+=31;
case 4:days+=30;
case 3:days+=31;
case 2:days+=isLeapYear(date->year) ? 29 :28;
case 1:days+=31;
return days;
}
return -1;
}

int isLeapYear(int year)
{
return (year%100 && year%4==0 )|| year%400==0;
}


days.c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐