数学解密什么生肖?
牛,10进制转二进制,除2取余 子鼠丑牛寅虎卯兔辰龙巳蛇未羊申猴酉鸡戌狗亥猪 这个转换在计算机中非常常见,比如硬盘和内存的地址编码、网页的url等等。很多语言都直接支持这种转换,比如python中的int()函数。因此我们只需要找到一种方法把农历年份转换为这样的格式即可。
正月是子月,二月是丑月,三月是寅月……十二月是丑月,因此只需要知道一年中那几周属于丑月,而哪几天属于子月就可以了。 农历年份一共有530周,所以只要记录前529周的星期数即可(因为最后一周不需要记录星期数)。然后转换成对应的十进制日期,加一起就是这年的阳历日期了。 那么问题就变成如何寻找每个月初的星期数了。
如果单纯依靠自然规律来推算的话,会出现闰年闰月的情况导致月初星期日数出现重复,因此就需要一个算法来计算出准确的月份初的星期数。 为了便于计算,将农历的每月初一天分成四个时段:子时、丑时、寅时和卯时;并将每一时段分配一个星期数:0-6,7-13,14-19,20-26。这样每个农历月的第一天的星期数就固定了。
具体推导过程就不再写了,太复杂了。这里只写结果:
1.当公历为元旦或者冬至的时候,农历日期为十一月和十二月的第一天,月份初的星期数等于100M+N,其中M=[Y/4],N=[3*Y+B],其中Y为公历年份,B为公历月份。例如2018年元旦,即2018年1月1日,属癸酉月丙寅日,查表得该月的月初星期数为13+(6-2)=21。又如2018年冬至,即2018年12月22日,属戊子月壬午日,查表得该月的月初星期数1+(7-3)=5。
2.其他情况月份的月初星期数等于100M+N+1,其中M同上,N同上。例如2018年5月6日,农历为四月十二,星期一,则月份初的星期数等于100×(4+2)+1=531。
由于一年有530个星期,因此最后一个月的月末需要记录星期数6。