您当前的位置:五五电子网电子知识单片机-工控设备51单片机网上一个非常流行的计算农历的算法 正文
网上一个非常流行的计算农历的算法

网上一个非常流行的计算农历的算法

点击数:7770 次   录入时间:03-04 11:56:46   整理:http://www.55dianzi.com   51单片机

#include

int LunarCalendar( int year, int *pmonth, int *pday)

{

    const int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};

    const int LunarCalendarTable[100] ={

                                2635,333387,1701,1748,267701,694,2391,133423,1175,396438

                            ,3402,3749,331177,1453,694,201326,2350,465197,3221,3402

                            ,400202,2901,1386,267611,605,2349,137515,2709,464533,1738

                            ,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762

                            ,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413

                            ,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395

                            ,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031

                            ,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222

                            ,268949,3402,3493,133973,1386,464219,605,2349,334123,2709

                            ,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};

    int DateCount,loop;

    int i,j,n,Bit;

    int month,day;

    month = *pmonth;

    day = *pday;

    //计算从1921年2月8日(正月初一)到现在所经历的天数。

    DateCount = (year - 1921) * 365 + (year - 1921) / 4 + MonthAdd[month - 1] - 38 + day;

//如今年阳历是闰年(2月有29天),而且当前月份大于2月,经历的总天数加1。

    if ((!(year % 4)) && (month > 2))

       DateCount = DateCount + 1;

    //下面是查表的算法。

    loop = 1;

    j = 0;

    while (loop)

    {

       if (LunarCalendarTable[j] < 4095)

           i = 11;

       else

           i = 12;

       n = i;

       while (n>=0)

       {

           Bit = LunarCalendarTable[j];

           Bit = (Bit >> n) & 1;

           if (DateCount <= (29 + Bit))

           {

              loop = 0;

              break ;

           }

           DateCount -= 29 + Bit;

           n--;

       }

       if (!loop)

           break ;

       j++;

    }

    year = 1921 + j;

    month = i - n + 1;

    day = DateCount;

    if (i == 12)

    {

[1] [2]  下一页


本文关键字:流行  网上  51单片机单片机-工控设备 - 51单片机

《网上一个非常流行的计算农历的算法》相关文章>>>