2011-06-11 389 views
7

我听说可以使用大多数编程语言中的模数%运算符来完成此操作。真正的问题是,如何?我不熟悉模数是如何工作的,所以我在过去使用它时遇到了困难。鉴于1970年以来的现在时间,1307758473.484,我如何计算多少年即几天,即几小时,以及使用模数的几分钟?将秒数拆分为几天,几小时,几分钟和几秒?

我基本上想要像这样格式化它:“5年,10天,12小时,7分钟和18.56秒”。我将如何做到这一点?我非常有兴趣了解这个背后的逻辑,并且对而不是感兴趣的是一个简单的插入式解决方案。

回答

19

当你做整数除法,你得到商和余数。例如,

5 divided by 3 is quotient 1 with remainder 2. 

在编程语言中,这通常被表述为:

5/3 # => 1 
5 % 3 # => 2 

你想要的转换只是这个repeatation。 从下单元开始更容易,更高。

首先,你必须

  • 1307758473.484 seconds

从60年代秒1分钟,

1307758473.484/60 = 21795974 (intended to be integer division) 
1307758473.484 % 60 = 33.484, 

它是一样的

  • 21795974 minutes 33.484 seconds

由于60分钟1小时,

21795974/60 = 363266 
21795974 % 60 = 14 

它进一步相同

  • 363266 hours 14 minutes 33.484 seconds

现在,有难度的一点点。大多数日子是24小时。当有闰秒时,则不是。如果忽略闰秒,并假定胃1天24小时,然后,通过执行计算,

363266/24 = 15136 
363266 % 24 = 2 

,进一步一样

  • 15136 days 2 hours 14 minutes 33.484 seconds

同样,大多数年份是365天。当有一个闰日(年)时,它不是。如果你忽略了飞跃天,假设1年的365天,然后通过执行计算,

15136/365 = 41 
15136 % 365 = 171 

,进一步一样

  • 41 years 171 days 2 hours 14 minutes 33.483 seconds
4

模数在执行整数除法时返回余数。

我认为它最容易理解如何使用国防部首先向后解决问题。

让我们从小时,分钟和秒开始简单 - 精确的1小时10分30秒。

首先,你有30秒。这很容易 - 这只是30.没有脑筋。 现在添加分钟数 - 将分钟数确定为乘以60的秒数。因此,10分30秒= 630秒。

现在我们看看mod是如何工作的 - 因为如果你除以60得到10.5,但是如果你忽略了分数(整数除法),那么你得到10。

所以,如果你MOD 630 60你30 - 为分钟分割时630 30

所以决定分,秒,除以60的余留下来,并通过60秒国防部。

现在添加一小时。一小时= 60分钟,60分钟为60 * 60秒,1小时= 3600秒。 3600 + 600 + 30 = 4230秒。

三千六百分之四千二百三十零(1小时)= 1 - 所以我们有1小时

4230%(MOD)3600 = 630 - 抓住这个,现在我们处理分钟。

所以如果进一步充实了这一点,并添加一个天 - 1天= 24小时数= 24 * 3600 = 86400 86400 + 3600 + 600 + 30 = 90630

八万六千四百分之九万〇六百三十零= 1 - > 1天

90630%86400 = 4230 - >秒遗留

三千六百分之四千二百三十零= 1 - >1小时

并重复上述逻辑。

希望可以帮助清理它 - 你不断重复这个迭代,你可以做几个星期和几年,但是月份是特殊的,因为它们是不规则的,闰年也是如此。

+0

很好的回答。 @TK,将其与进行更改并将数字从基数x转换为基数y进行比较。这里有一个共同的模式。 – 2011-06-11 02:40:11

相关问题