一個星期有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}天后是星期五") }}
代碼運行結果