【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乘法溢出-创新互联
文章位置:https://www.cdcxhl.com/article12/dhpdgc.html

成都网站建设公司_创新互联,为您提供动态网站网站策划虚拟主机微信公众号网站导航企业网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司