一个星期有7天,大家都知道。如果问49天后是星期几?7天1循环,49除以7余数0,所以还是星期天。100天以后呢?100除以7余数为2,所以是星期二。那么10000000000000000000000000天以后是星期几?拿小本本和笔去计算吗?计算量好像有一点儿大。 有计算器,我为啥不用计算器?哈哈。 计算器科学模式下计算结果 这里使用的是Deepin系统下的计算器。切换到科学模式,做取模运算就可以了。win10的计算器是下面这个样子的。 window 10的计算器 作为一个程序员,应该知道这么大的数字,已经超出了整型(Int)、长整型(Long)的范围 。那么如果我们自己写程序怎么写呢? 幸运的是Java中有BigInteger,走出范围的,我们可以用它来存储和计算。fun main() { val days = BigInteger("10000000000000000000000000") val result = days.mod(BigInteger("7")) println(result) } 计算结果 这真是简单的不能再简单了。 再想一想,一定要用BigInteger吗?有没有什么规律可以利用呢?很多规律都可以用总结的方式去推导出来。那么我们就总结一下。 计算星期几的 一三二六四五一三二六四五……规律一眼就看出来了。那么我们用0的个数去模6,结果是0就是星期一,结果是1就是星期三,结果是2就是星期二……利用这个规律,我们可以把代码改一改。fun main() { val days = "10000000000000000000000000" val zeroCount = days.length - 1 when (zeroCount % 6) { 0 -> println("${days}天后是星期一") 1 -> println("${days}天后是星期三") 2 -> println("${days}天后是星期二") 3 -> println("${days}天后是星期六") 4 -> println("${days}天后是星期四") 5 -> println("${days}天后是星期五") } } 代码运行结果