闰年算法问题

puzzle1986 2008-10-09 10:47:18
见得最多得算法是:
true = y%4 == 0 && y%100 != 0 || y%400 == 0
可是小学就学过只要年数y除以4没有余数就是闰年,为什么多出来那么多?(是算法的效率问题?)


还有个是在MOP上看到的,有这么一题:

main( )
{

int a = 1, b = 2;

printf( "%d", 1 + a/b ); /*把1 + a/b换成1.0 + a/b后,运算结果是0,前面是正常的1,为什么?我是在linux下用gcc编译的*/

}
...全文
631 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xianyuxiaoqiang 2008-10-10
  • 打赏
  • 举报
回复
小学老师水平比较差。
我小学老师也是错的。初中老师倒教的不错。润年就是按照该算法算的。

另外%d对应int型。后面1.0是float型,float和int相加结果为float,输出
时格式不匹配。想深入研究的话看看计算机原理中有关float的规约。
阿提饭 2008-10-10
  • 打赏
  • 举报
回复
你老师错了
hander_vip 2008-10-10
  • 打赏
  • 举报
回复
baidu知道上的:
关于公历闰年是这样规定的:地球绕太阳公转一周叫做一回归年,一回归年长365日5时48分46秒。因此,公历规定有平年和闰年,平年一年有365日,比回归年短0.2422日,四年共短0.9688日,故每四年增加一日,这一年有366日,就是闰年。但四年增加一日比四个回归年又多0.0312日,400年后将多3.12日,故在400年中少设3个闰年,也就是在400年中只设97个闰年,这样公历年的平均长度与回归年就相近似了。由此规定:年份是整百数的必须是400的倍数才是闰年,例如1900年、2100年就不是闰年。
zzhzhua 2008-10-10
  • 打赏
  • 举报
回复
楼上的同志已经解决了。
WEN2222 2008-10-09
  • 打赏
  • 举报
回复
你算一下1000年是闰年吗?
1.0是浮点型,1是整形,运算的时候会转化为浮点型,要用那个%f的
dayuanquan 2008-10-09
  • 打赏
  • 举报
回复
bool judge(int n)
{
return (n%4==0&&n%100!=0)||n%400==0;
}
phz1985 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 puzzle1986 的帖子:]
见得最多得算法是:
true = y%4 == 0 && y%100 != 0 || y%400 == 0
可是小学就学过只要年数y除以4没有余数就是闰年,为什么多出来那么多?(是算法的效率问题?)


还有个是在MOP上看到的,有这么一题:

main( )
{

int a = 1, b = 2;

printf( "%d", 1 + a/b );    /*把1 + a/b换成1.0 + a/b后,运算结果是0,前面是正常的1,为什么?我是在linux下用gcc编译的*/

}


[/Quote]
你老师教错了.
chlaws 2008-10-09
  • 打赏
  • 举报
回复
改1.0那就是类型提升到float类型 用%d会溢出 所以要改格式输出符
tabby198512 2008-10-09
  • 打赏
  • 举报
回复
应该是赋值问题吧!一个浮点型的数按照整型格式输出,因为所占的内存不一样,高位舍弃,所以就是0了
JDR77 2008-10-09
  • 打赏
  • 举报
回复
整百年要是400的倍数才算是闰年,所以公元1000年不是闰年。
四年一闰,百年不闰,四百年再闰

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧