首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求大侠相助,计算两个年份直接的闰年数,不用循环

2014-01-05 
求大侠帮助,计算两个年份直接的闰年数,不用循环昨天发来的面试题目,让我做日期计算器,明确说明不准用循环。

求大侠帮助,计算两个年份直接的闰年数,不用循环
昨天发来的面试题目,让我做日期计算器,明确说明不准用循环。
我现在的思路是先把年份之间的闰年数确定下来,网上看到的代码都是用循环累加。
又没有什么算法,可以不用循环计算出两个年份之间的闰年数量。
[解决办法]
先找到下一个闰年,然后再找到最后一个闰年 相减后除以4加1 就是 4的倍数的年份的个数  另其为S

然后对经过的百年进行逐一辨别 找出非闰年 令其为D  ans:S - D 
[解决办法]
个人想法:
什么是闰年,每隔四年一次?
不对, 应该是每隔400年有400/4 - 3 = 97个,3个不是闰年的是,100,200,300,这3个能被100整除,却不能被400整除.所以每100年内, [n, n+100)有25或者24个, 当n%400==0就有25,其他24.
这样应该就能马上算出f(n)是从0,到n这年有多少个闰年,要求两个年份a,b中间的闰年数
f(b)-f(a)即可,b >= a
[解决办法]
我觉得大概是这个思路:先算超过400年,再算超过100年,再算100年内的。
设两年分别是整数a和b(b>a),则
闰年数=((b - a)/400)*97 +((b - a)% 400) / 100 * 24 + (((b - a) % 400) % 100) / 4。
结果不一定对,可能要再考虑a和b是闰年的情况。
[解决办法]
一个数学问题:
给定x,y(x < y)
求x,y之间4的倍数的个数a,100的倍数的个数b,400的倍数的个数c
闰年的个数为a - b + c

至于求a的方法:
if (x % 4 != 0)
  x = x + 4 - x % 4; // 把x变成不小于x的能被4整除的数
if (y % 4 != 0)
  y = y - y % 4; // 把y变成不大于y的能被4整除的数
if (x <= y)
  a = (y - x) / 4 + 1;
else
  a = 0;
求b、c类似了

热点排行