高手帮我看看,详细说明看图//下面面数据存放了1900年到1909 十年的农历 大小月情况求 农历1900年x月x日 距公历1900年1月1日的的天数const unsigned int nongli[10] = {0xDB4A,0x2D4A,0x0A95,0x992B,0x792E,0x0A6D,0x95

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/26 05:06:34
高手帮我看看,详细说明看图//下面面数据存放了1900年到1909十年的农历大小月情况求农历1900年x月x日距公历1900年1月1日的的天数constunsignedintnongli[10]={0

高手帮我看看,详细说明看图//下面面数据存放了1900年到1909 十年的农历 大小月情况求 农历1900年x月x日 距公历1900年1月1日的的天数const unsigned int nongli[10] = {0xDB4A,0x2D4A,0x0A95,0x992B,0x792E,0x0A6D,0x95
高手帮我看看,详细说明看图
//下面面数据存放了1900年到1909 十年的农历 大小月情况



求 农历1900年x月x日 距公历1900年1月1日的的天数
const unsigned int nongli[10] = {0xDB4A,0x2D4A,0x0A95,0x992B,0x792E,0x0A6D,0x955A,0x65AA,0x0D65,0x9D4A};
int get(int n ,int y,int r,int s=0)//n是年,r是日,s=1表示y是个闰月,默认不是.
{
\x05int nc=n-1900;//年差
\x05int sum=0;
\x05y=y+2;//因为生活中的农历是从正月初一开始,上面数据表从上年的冬月1日开始.
\x05if(y>12)//例如要查农历3月,那么应该是第5个月 第4位.
\x05{
\x05\x05y=y-12;
\x05\x05nc=nc+1;
\x05}
\x05int rn=(nongli[ nc ]>>15) & 0x01 ;//查看是否含有闰月.
\x05if(s&&!rn)//如果设置闰月,而不存在闰月
\x05{\x05
\x05\x05return -1;
\x05}
\x05int nxh;
\x05int yxh;
\x05int rno;
\x05for( nxh=0;nxh<nc;nxh++)//年循环
\x05{
\x05\x05 rno =(nongli[ nxh ]>>15) & 0x01 ;//挨个检测是否含有闰月,有闰月就取值到12位.


\x05\x05for(int yxh=0;yxh<( rno 13 :12); yxh++)
\x05\x05{
\x05\x05\x05sum=sum+(29+((nongli[nxh]>>yxh)&0x01));//29+1是大月,29+0是小月
\x05\x05}


\x05}


\x05int ry=0;
\x05if(!rn)//不存在闰月
\x05{
\x05\x05for( yxh=0;yxh<y;yxh++)
\x05\x05{
\x05\x05\x05sum=sum+(29+((nongli[nxh]>>yxh)&0x01));


\x05\x05} 
\x05\x05//if(   r>   (29+((nongli[nxh]>>yxh)&0x01))    )//如果该月只有29天,却求30天返回错误.
\x05\x05//{
\x05\x05//\x05return -1;
\x05\x05//}


\x05}
\x05else//如果存在闰月
\x05{ 
\x05\x05ry= ( (nongli[ nc ] & 0x4000 ) >> 11 ) + ( nongli[ nc + 1  ] >> 12 );//查出闰那个月
\x05\x05if(s)
\x05\x05{
\x05\x05\x05if(y==ry)
\x05\x05\x05{
\x05\x05\x05\x05for(yxh=0;yxh<(y+1);yxh++)//
\x05\x05\x05\x05{
\x05\x05\x05\x05\x05sum=sum+(29+((nongli[nxh]>>yxh)&0x01));//求整月的天数
\x05\x05\x05\x05}
\x05\x05\x05\x05
\x05\x05\x05}else
\x05\x05\x05{
\x05\x05\x05\x05return -1;
\x05\x05\x05}
\x05\x05\x05
\x05\x05}
\x05\x05else//没设置闰月
\x05\x05{
\x05\x05\x05if(y<(ry+1))//小于闰月
\x05\x05\x05{
\x05\x05\x05\x05for(yxh=0;yxh<y;yxh++)
\x05\x05\x05\x05{
\x05\x05\x05\x05\x05sum=sum+(29+((nongli[nxh]>>yxh)&0x01));
\x05\x05\x05\x05}
\x05\x05\x05}
\x05\x05\x05else if(y>ry)//大于闰月
\x05\x05\x05{  
\x05\x05\x05\x05y=y+1;//延后一月.
\x05\x05\x05\x05for(yxh=0;yxh<y;yxh++)
\x05\x05\x05\x05{
\x05\x05\x05\x05\x05sum=sum+(29+((nongli[nxh]>>yxh)&0x01));
\x05\x05\x05\x05}
\x05\x05\x05\x05
\x05\x05\x05}
\x05\x05}


\x05\x05
\x05}
\x05\x05
\x05return sum+r-59;//-59调整 与1900年1月1日的时间差
}
1903年6月25 农历 闰5月1 返回1270
1903年7月24 农历6月1 返回 1300.实际1299,多了一天
1903年8月23 农历7月1 返回1329没问题
为什么闰月后的一个月就会多了一天,其他都正常.谁能帮我看看

高手帮我看看,详细说明看图//下面面数据存放了1900年到1909 十年的农历 大小月情况求 农历1900年x月x日 距公历1900年1月1日的的天数const unsigned int nongli[10] = {0xDB4A,0x2D4A,0x0A95,0x992B,0x792E,0x0A6D,0x95

不知道楼主那个-59调整是怎么算出来的,准确与否,

后面取整月的程序,应该把y值全部剪去1吧,只能算前面几个月的,最后一个月不算整月,所以只能加上零头r.

所以最终的-59我觉得有问题.

如楼主所附答案,当输入1900.8.29.1时候,楼主所计算的当年的总共计算了当年的11个月,5X30+6X29+29-59=294,当输入1900.9.1时候,计算了12个月,6X30+6X29+1-59=296,刚好差两天,因为多计算了一个月,楼主算润8月的时候已经把整个润8月算进去了,润八月为小月,多算了29天,而算9月的时候,已经把整个九月算进去了,九月为大月,多算30天,两相比较,就出现了楼主的情况了.

若y全部剪去1,则最终答案为

润八月29:5X30+5X29+29-59=324-59

九月1  :   5X30+6X29+1-59=325-59

刚好只差一天

高手帮我看看,详细说明看图//下面面数据存放了1900年到1909 十年的农历 大小月情况求 农历1900年x月x日 距公历1900年1月1日的的天数const unsigned int nongli[10] = {0xDB4A,0x2D4A,0x0A95,0x992B,0x792E,0x0A6D,0x95 帮我看看看 请个高手帮我详细分析下开关电源电路图 这个电路图,具体说明每个元件的功能 那位高手帮我详细说明一下这个图用CAD怎么画? 请数独高手们帮我看看一道数独题,帮我算下 请数独高手们帮我看看一道数独题,帮我算下 认字高手帮我看下了几个字是啥字来的 求高手帮我看看一张英语的单子高手帮我翻译下 翻好了追加100分 excel中两列数据如何把数据中最大的值和数据最小值减去,然后求平均值?高手再帮我看看~!谢谢 题目见照片.高手帮我看看,可以把照片结合在一起看. 奇门遁甲的高手帮我看看这个盘的意思好吗我想看爱情 阿拉伯语数字 求牛人看看写得对不对如图!谢谢 帮我看下对不对 不对的话帮我说下!感激 涡街流量计需要一个压力信号和一个温度.请求高手帮我详细的说明下压力变送器和PT100热电阻怎么连接流量计. 高一化学的离子反应和氧化还原反应好难,都不懂,请高手帮我解决?详细说明下,谢嗒 刚买的Phone4 有人帮我看看不?Part No.MC603ZA/A麻烦高手帮我看下这个手机的生产地.还有下面的.Assembledin China model A1332Serlal No,80051XSGA4S 请数独高手们帮我看看一道数独题,帮我算出下一个数字就行了,并且请说明理由,用说明方法的,001020580563807920820005003008604100010058060006201800900002058082509370005080200 图我发了 你看看 帮回答下 请懂纹身的高手帮我看一下这个图是什么意思知道的麻烦回答下谢谢了!m8