轨道
/
Cairo
Cairo
/
练习
/
太空时代
太空时代

太空时代

简单

简介

2525 年,你刚刚踏上旅程,准备造访太阳系里的所有行星(水星、金星、地球、火星、木星、土星、天王星和海王星)。 第一站是水星,那里的海关要求你填写一张表格(看来官僚作风_并非_地球独有)。 你把表格递给海关官员,对方仔细查看后皱起了眉。 “你_真的_觉得我会相信你只有 50 岁吗? 你肯定快 200 岁了!”

你觉得好笑,等着海关官员笑出声,可对方一脸严肃,完全不像在开玩笑。 你这才意识到,自己填的年龄是按_地球年_算的,而官员期待的却是_水星年_! 水星绕太阳的公转周期比地球短得多,所以换算成水星年,你的年龄其实大得多。 快速计算一番之后,你报出了自己的水星年龄。 海关官员满意地笑了笑,挥手示意你通过。 你暗暗记下,以后过海关检查前要_提前_算好自己的各行星年龄,免得再出这种岔子。

Note

如果你想知道冥王星为什么没有入选,可以看看这个 YouTube 视频。

说明

给定一个以秒为单位的年龄,计算这个人在太阳系中某颗行星上的年龄。

一个地球年等于 365.25 个地球日,即 31,557,600 秒。 如果有人告诉你某人已经 1,000,000,000 秒大了,那么他的年龄就是 31.69 地球年。

对于其他行星,你需要考虑它们以地球年为单位的公转周期:

Planet Orbital period in Earth Years
Mercury 0.2408467
Venus 0.61519726
Earth 1.0
Mars 1.8808158
Jupiter 11.862615
Saturn 29.447498
Uranus 84.016846
Neptune 164.79132
Note

地球绕太阳完整公转一周的实际时长更接近 365.256 天(1 个恒星年)。 公历平均一年有 365.2425 天。 虽然不完全准确,但本练习采用的就是 365.25 这个值。 衡量一年的方法还有很多,参见维基百科上的“年”。

实现

在 Cairo 中,原生并不支持浮点数,所以我们用整数来表示小数值。

在区块链开发中,这种做法对于保持计算精度至关重要。

在本练习中,我们把公转周期换算成微秒,从而使用定点运算。

例如,水星 0.2408467 地球年的公转周期,乘以 1,000,000 之后就变成 240,846,700 微秒。

为了处理小数精度,测试用例假定得到的年龄保留两位小数,并用整数表示。

也就是说,代码中会把 31.69 岁的年龄存成 3169。

为此,我们在做除法之前先乘以 100。

下面是一个例子:

let mercury_orbital_period = 240_846_700; // in microseconds
let age_microseconds = age_seconds * 1_000_000;
// multiplying with 100 to retain 2 decimal places
age_microseconds * 100 / mercury_orbital_period

使用这种方法,你就能在保持所需两位小数精度的同时,把小数值准确地表示为整数,而这对通过测试至关重要。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Cairo Exercism

准备好开始 太空时代 了吗?

注册 Exercism,借助 25 个概念68 个练习 和真人导师指导,学习并掌握 Cairo,全部免费。