设为首页 加入收藏

TOP

C语言经典面试题――一年有多少秒――宏定义#define SECONDS_PER_YEAR
2014-11-23 19:48:28 来源: 作者: 【 】 浏览:4
Tags:语言 经典 试题 一年 多少 定义 #define SECONDS_PER_YEAR

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


答案如下:

#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个闰年,闰年是调节回归年的。前边也提了闰年规则是四年一补,补多了要减去点,如果按恒星年补,四年一个闰年还不够,哪会让你四百年内还少三个闰年呢。



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

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

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

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

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

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

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


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


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

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



深藏功与名,叫我胡学究

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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-c史上最全字符串处理 下一篇C语言总结――结构体(struct)使..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: