一個(gè)星期有7天,大家都知道。如果問49天后是星期幾?7天1循環(huán),49除以7余數(shù)0,所以還是星期天。100天以后呢?100除以7余數(shù)為2,所以是星期二。那么10000000000000000000000000天以后是星期幾?拿小本本和筆去計(jì)算么?計(jì)算量好像有一點(diǎn)兒大。
有計(jì)算器,我為啥不用計(jì)算器?哈哈。
計(jì)算器科學(xué)模式下計(jì)算結(jié)果
這里使用得是Deepin系統(tǒng)下得計(jì)算器。切換到科學(xué)模式,做取模運(yùn)算就可以了。win10得計(jì)算器是下面這個(gè)樣子得。
window 10得計(jì)算器
作為一個(gè)程序員,應(yīng)該知道這么大得數(shù)字,已經(jīng)超出了整型(Int)、長整型(Long)得范圍
。那么如果我們自己寫程序怎么寫呢?
幸運(yùn)得是Java中有BigInteger,走出范圍得,我們可以用它來存儲和計(jì)算。
fun main() { val days = BigInteger("10000000000000000000000000") val result = days.mod(BigInteger("7")) println(result)}
計(jì)算結(jié)果
這真是簡單得不能再簡單了。
再想一想,一定要用BigInteger么?有沒有什么規(guī)律可以利用呢?很多規(guī)律都可以用總結(jié)得方式去推導(dǎo)出來。那么我們就總結(jié)一下。
計(jì)算星期幾得
一三二六四五一三二六四五……規(guī)律一眼就看出來了。那么我們用0得個(gè)數(shù)去模6,結(jié)果是0就是星期一,結(jié)果是1就是星期三,結(jié)果是2就是星期二……利用這個(gè)規(guī)律,我們可以把代碼改一改。
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}天后是星期五") }}
代碼運(yùn)行結(jié)果