posts - 183,  comments - 10,  trackbacks - 0
闰年判断就是 能被 400 整除的,后者能被 4 整除且不能被 100 整除的年份。

 1 int isLeapYear(int y)
 2 {
 3     if ((y % 4 == 0 && y % 100 != 0|| y % 400 == 0)
 4     {
 5         return 1;
 6     }
 7     else
 8     {
 9         return 0;
10     }
11 }

但是这里有个细节需要注意就是,(y % 4 == 0 && y % 100 != 0) || y % 400 == 0 这个表达式中的三个子表达式的顺序怎样调整。

% 4 == 0

% 100 != 0

% 400 == 0

这里有 4 中组合:

·(y % 4 == 0 && y % 100 != 0|| y % 400 == 0 

·(y 
% 100 != 0 && y % 4 == 0|| y % 400 == 0 

·y 
% 400 == 0 || (y % 4 == 0 && y % 100 != 0

·y 
% 400 == 0 || (y % 100 != 0 && y % 4 == 0)


我们首先确定 y % 400 是不是应该在最前,对于一般的年份很少有能被 400 整除的年份,其概率为 1 / 400,所以 y % 400 == 0 基本都为假,这样就必须还要判断后面的表达式,所以应该将 y % 400 放在后面。

然后,判断 y % 100 != 0 是否应该在 y % 4 == 0 之前,y % 100 != 0 为真的概率很大及为 99 / 100,而 y % 4 == 0 为真的概率为 1 / 4,也就是说 y % 4 为假的概率更大。根据 && 操作符的性质,当前面一个为假时其就不用判断后面的表达式是否为真假了。所以应该把 y % 4 == 0 放在 y % 100 != 0 前面效率更好。

即判断闰年的表达式顺序应该为这样是,效率最高:

(y % 4 == 0 && y % 100 != 0|| y % 400 == 0
posted on 2011-04-22 00:17 unixfy 阅读(122) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理