原帖由 nyfor 于 2008-5-26 09:58 发表 ![]()
sign(mod(y, 16 - 4 * instr(y / h, '.'))
这一部分代码, 打死我也想不出来的, 到现在我都没有理解
判断闰年: 非百年看后两位能否被4整除, 百年看前两位能否被4整除, 再往前推, 百年能被100整除, 又 100 = 4 * 25, 故闰百年必能被16整除, 年/100, 能整除的无小数点, 是百年, 不能整除的有小数点, 凑巧小数点的位置为3, 综合以上, 故, 非百年 MOD 4 , 百年 MOD 16, 能整除的都是闰年. 这也就是为什么用 INSTR(Y/H,'.') 而不用 SIGN(MOD(Y, H)) 的原因, 虽然它们的长度是一样, 但 12 * {0, 1} 和 4 * {0, 3} 相比, 多了一个Byte |