我们来自五湖四海,不为别的,只因有共同的爱好,为中国互联网发展出一分力!

C语言经典面试题——一年有多少秒——宏定义#define SECONDS_PER_YEAR

2014年05月12日01:03 阅读: 4765 次

标签: C语言经典面试题——一年有多少秒——宏定

让你定义一个宏,说出一年有多少秒:


答案如下:


?
1
#define SECONDS_PER_YEAR 60*60*24*365(UL)


“这样的好处是:写出公式而不用动手计算,让编译器给你计算,省脑子。重点是你还写出了结果的来源,条理清晰,便于阅读?;褂?,那个UL显示了你对数据大小的严谨,”


“切~用你说?谁不知道?”——看到这,很多人一定对这个帖子嗤之以鼻,相信这是很多C语言玩家烂熟于心的一个答案了吧?!


SECONDS_PER_YEAR就是秒每年吧——秒/年!


那么,一年到底有多少秒?我再换个问法,每年都一样么?闰年你又怎么解决?众所周知,每四年有一个闰年,这还不是全部,逢百年的时候你必须用年份除以四百,除得开才是闰年。


地球围绕太阳公转一周(即360度)的时间应该为365日6时9分10秒,即为一个恒星年。

地球的某点获得两次两次直射的间隔是365日5时48分46秒更加精确:365天5小时48分45.975456秒),即为一个回归年。


一个回归年折算成小数,大概是365.2422日,400年里多出了96.88天,而按四年一个闰年算,400年里少3个闰年,即总共97个闰年,闰年是调节回归年的。前边也提了闰年规则是四年一补,补多了要减去点,如果按恒星年补,四年一个闰年还不够,哪会让你四百年内还少三个闰年呢。



看到这里,相信各位小伙伴已经有答案了:


?
1
2
#define 365*24*60*60+5*60*60+48*60+46(UL)
//很有条理很清晰吧?怎么样,我说,你还不如用计算器了~~一定要加上文字注释~?。?!


不过还有意外,他问的会不会是恒星年?恒星年就按如下定义


?
1
2
#define 365*24*60*60+6*60*60+9*60+10(UL)
//一定要加上文字注释~~告诉他这是恒星年


我们也看到,没有什么东西是那么精确的,如果按365天5小时48分45.975456秒算,那应该使用浮点数偷笑

31556925.9754456(这还不是绝对精度~~~)

如果按这个数,32位的浮点还是够用的。


怎么样,躺着中枪了吧,这么简单的C语言你都不会,回去面壁吧。



不过还有方法,你跟他说你用日历年计算:

?
1
#define SECONDS_PER_YEAR 60*60*24*365(UL)
绕回来了大笑



深藏功与名,叫我胡学究

带上你的贞操和逻辑,欢迎较真抬杠,转发请注明出处。


分享到: 更多
©2019 安全焦点 版权所有.
人才招聘联系我们

澳门永利网址_澳门永利网址大全_澳门永利网址导航