被csdn各种大牛打击的...继续加油...
今天翻了下《编程珠玑》,其实这本书感觉对自己还是有点深,吃不透啊。
看到一题,有一小问是给定两个日子,计算这两个日子的天数;
碰巧前几天做web作业也有差不多这题的,不过那一题直接调用系统函数的,两个日期一减/1000/60/60/24就是天数了;
c中还真不知道有没有这样强大的函数,如果有,各位告诉我一下;
说一下我实现的吧,给了两个日期,分别求出由公元元年开始过的天数,然后相减,即是相差的天数(正负不计较,大家都明白的);
/**********
* 2013-12-30
* _Luffy
* http://blog.youkuaiyun.com/xjm199
***********/
#include <stdio.h>
int isleapyear(int year) //是否是闰年
{
return ((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0);
}
int sum(int year, int month, int day)
{
int mon[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int sum = (year - 1) * 365; //自公元1年来的天数
int i;
sum += (year - 1) / 4 + 1; //能被4整除的都加上
sum -= (year - 1) / 100 + 1; //其中被100整除的不是闰年
sum += (year - 1) / 400 + 1; //实际上能被400整除的即为闰年
for(i = 0; i < month - 1; ++i) //将本年的剩下的整月加上
sum += mon[i];
if(isleapyear(year) == 1 && month > 2) //本年是否闰2月
++sum;
sum += day; //本月的日子加上
return sum;
}
int main()
{
printf("%d\n", sum(2013, 11, 1) - sum(2013, 9, 30));
return 0;
}
sum中求得的就是由公元元年以来的日子;
结果如下:
32
Process returned 0 (0x0) execution time : 0.331 s
Press any key to continue.
小工程可见:http://download.youkuaiyun.com/detail/xjm199/6790267
欢迎各位提点...o(∩_∩)o