求,计算year年距离N年之后,在年数里共有多少天.下面的编程测试结果是正常的,但我觉得在 for(i=N+1;i

来源:学生作业帮助网 编辑:作业帮 时间:2024/12/02 05:13:38
求,计算year年距离N年之后,在年数里共有多少天.下面的编程测试结果是正常的,但我觉得在 for(i=N+1;i
xTMS`+9SE'͡qƩ-QLE(#fߏSB7=ww}gM23Gn6E=]c}1 ksGFPC)zCyhڇEܵ Ѥ-:N(0LrT'U|?ƨ莶Inpo qe5SKwdC *\ĵځKX̆ +|#0ԉs #u}vy9jv r

求,计算year年距离N年之后,在年数里共有多少天.下面的编程测试结果是正常的,但我觉得在 for(i=N+1;i
求,计算year年距离N年之后,在年数里共有多少天.
下面的编程测试结果是正常的,但我觉得在 for(i=N+1;i

求,计算year年距离N年之后,在年数里共有多少天.下面的编程测试结果是正常的,但我觉得在 for(i=N+1;i
不使用循环的话,就需要使用公式推导闰年次数了.
从公元1到X年,闰年次数为:X/4-X/100+X/400
那么,从N+1年到year年间,闰年次数为:(year/4-year/100+year/400)-(N/4-N/100+N/400)
化简为:(year-N)/4-(year-N)/100+(year-N)/400
有了上述结果,总天数就好计算了,方法是:平年数*365+闰年数*366 == (年数-闰年数)*365+闰年数*366 == 年数*365+闰年数
程序实现如下:
int year_cnt = year - N;
int leap_year_cnt = year_cnt / 4 - year_cnt / 100 + year_cnt / 400;
int total_day_cnt = year_cnt * 365 + leap_year_cnt;
额外说一下:通常像这样的算法,如果不是被极高频率的调用,使用循环实现是可以接受的,循环次数有限,性能通常不是问题.反之,使用我所说的算法虽然效率有所提高,但可能无关紧要,反而使程序更难于阅读、理解和维护.所以请酌情选择使用哪种算法.