場景:求2021分解為五個正整數(shù)和的方法有多少種。
創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、成都做網(wǎng)站與策劃設(shè)計,龍井網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:龍井等地區(qū)。龍井做網(wǎng)站價格咨詢:18982081108考慮數(shù)學(xué)方法
* 可以把2021看成2021個1的數(shù)列,采用1中間取間隔的方法分成5段
* 如5分解為三個數(shù)和: 1 | 1 1 | 1 1? ? ? ? ?4個間隔分兩段
* 那么2021分解為五個正整數(shù)和: 2020個間隔分4段 C(4,2020) = 2020*2019*2018*2017/4*3*2
而在Java中計算這個答案,出錯。
long sum = (2020*2019*2018*2017)/(4*3*2);//出錯
甚至一開始都不知道錯了,算出的答案如下:
8582718
自己用電腦自帶的計算器算后發(fā)現(xiàn)答案是691677274345。
查詢后發(fā)現(xiàn)在1024*1024*1024*2-1是2的31次方-1,正好是int的表示范圍,我的分子早就超過這個范圍,右邊表達(dá)式默認(rèn)按照int來,先Int計算,再轉(zhuǎn)換為long。
所以只要將乘數(shù)表示為long,即在后面加上L標(biāo)志,就不會溢出。
long sum = (2020*2019*2018L*2017)/(4*3*2);
System.out.println(sum);//691677274345
注意L要加在快溢出的數(shù)后面,因為我一開始加到了分子表達(dá)式的2017后面,和沒加一樣。。。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧