读书人

日历计算天数少了解决方案

发布时间: 2012-03-31 13:13:26 作者: rapoo

日历计算天数少了
我写了一个简单的公历和伊斯兰日历转换的程序,计算天数结果少了几天。日期越往后少的越多,是不是闰年计算有问题。代码在下面。
计算公历天数的:

C/C++ code
for(i=623;i<csy;i++)        {            if(i<1582)  //1582年之前的计算            {                if(i%4 == 0)                {                    leapy = 366;                }                else                {                    leapy = 365;                }            }                        if(i>=1582)  //1582年之后的计算            {                if(i%400 == 0 || (i%4 == 0 && i%100 != 0))                {                    leapy = 366;                }                else                {                    leapy = 365;                }            }if(csy>=1582)//sldaycount和sdaycount是两个数组,存的每月底之前的总天数,csy是要转换的年,csm是要转换的月,csd是要转换的天,        {        if(csy%400 == 0 || (csy%4 == 0 && csy%100 != 0))            md = sldaycount[csm-1] + csd;        else            md = sdaycount[csm-1] + csd;        }        else        {            if(csy%4 == 0)                md = sldaycount[csm-1] + csd;            else                md = sdaycount[csm-1] + csd;        }                if(csy >= 1582)            day = yd + md + preday - 10;//计算总共天数        else            day = yd + md + preday;


计算回历天数的:
C/C++ code
for(i= 0; li<ld; i++)        {                        iy = leapyear(i%30+1);            li = li + iy;                    }leapyear()int ycount=0; //每年天数    //    static int i=0;    switch(iremain)    {    case 2:    case 5:    case 7:    case 10:    case 13:    case 16:    case 18:    case 21:    case 24:    case 26:    case 29:        ycount = 355;        break;    default:        ycount = 354;                break;        }        return ycount;


结果为什么少了几天呢?

[解决办法]
几个问题:
1、1582年之前的闰年的算法为啥不一样啊。
2、leapyear()是个函数吧,调用的时候传了参数,定义部分为啥没看到参数呢?
代码拷贝的不完全?

读书人网 >C语言

热点推荐