网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

【Java】long乘法溢出-创新互联

场景:求2021分解为五个正整数和的方法有多少种。

创新互联公司是一家专注于做网站、成都做网站与策划设计,龙井网站建设哪家好?创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:龙井等地区。龙井做网站价格咨询:18982081108

考虑数学方法

* 可以把2021看成2021个1的数列,采用1中间取间隔的方法分成5段

* 如5分解为三个数和: 1 | 1 1 | 1 1         4个间隔分两段

* 那么2021分解为五个正整数和: 2020个间隔分4段 C(4,2020) = 2020*2019*2018*2017/4*3*2

而在Java中计算这个答案,出错。

long sum = (2020*2019*2018*2017)/(4*3*2);//出错

甚至一开始都不知道错了,算出的答案如下:

8582718

自己用电脑自带的计算器算后发现答案是691677274345。

查询后发现在1024*1024*1024*2-1是2的31次方-1,正好是int的表示范围,我的分子早就超过这个范围,右边表达式默认按照int来,先Int计算,再转换为long。

所以只要将乘数表示为long,即在后面加上L标志,就不会溢出。

long sum = (2020*2019*2018L*2017)/(4*3*2);
System.out.println(sum);//691677274345

注意L要加在快溢出的数后面,因为我一开始加到了分子表达式的2017后面,和没加一样。。。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站题目:【Java】long乘法溢出-创新互联
文章出自:http://bjjierui.cn/article/dhpdgc.html

其他资讯