被csdn各种大牛打击的...继续加油...
今天翻了下《编程珠玑》,其实这本书感觉对自己还是有点深,吃不透啊。
看到一题,有一小问是给定两个日子,计算这两个日子的天数;
碰巧前几天做web作业也有差不多这题的,不过那一题直接调用系统函数的,两个日期一减/1000/60/60/24就是天数了;
c中还真不知道有没有这样强大的函数,如果有,各位告诉我一下;
说一下我实现的吧,给了两个日期,分别求出由公元元年开始过的天数,然后相减,即是相差的天数(正负不计较,大家都明白的);
/********** * 2013-12-30 * _Luffy * http://blog.csdn.net/xjm199 ***********/ #includeint 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.
欢迎各位提点...o(∩_∩)o