java中超过long范围的超大整数相加算法详解(面试高频)
java里有数字long来表示大的整数,如果两个数字的范围超过了long,要做加法算法怎么做呢?
这个问题在面试中经常碰到,如果之前没有经历的,可能一时有点想不起来怎么做。
下面我们来分析一下,两个数字超过了long的范围,那显然不能用java中的基本数字类型来计算了。
我们可以想小时候刚学习加法的竖式运算,个位对个位,十位对十位,百位对百位、、、以此类推。当个位满十向十位进1,十位满十向百位进1、、、以此类推,就这样完成了运算。
表示出来如下:
145
+269
-------------
414
受此启发我们可以做这道题了,数字如果超过了long的范围那显然在java里是以String类型呈现的,下面我们上代码。
packagecom.wandou.demo.algorithm.post; importorg.junit.Test; /** *@authorliming *@date2020-08-19 *@description算法 */ publicclassBigNumAddDemo{ @Test publicvoidbigintegerAddTest(){ System.out.println("Long.MAX_VALUE="+Long.MAX_VALUE); bigNumAdd("111","2010"); bigNumAdd(Long.MAX_VALUE+"",Long.MAX_VALUE+""); bigNumAdd(Long.MAX_VALUE+"","10"); } publicvoidbigNumAdd(StringstrNum1,StringstrNum2){ char[]chars1=strNum1.toCharArray(); char[]chars2=strNum2.toCharArray(); intlen1=chars1.length; intlen2=chars2.length; booleanoneBiger=len1>len2; intlen=Integer.max(len1,len2); StringBuildertargetSb=newStringBuilder(); //进位 intcarry=0; for(inti=0;i9){ carry=1; targetSb.append(temp-10); }else{ targetSb.append(temp); } } System.out.println(targetSb.reverse().toString()); } }
测试结果:
总结
到此这篇关于java中超过long范围的超大整数相加算法(面试高频)的文章就介绍到这了,更多相关java超过long超大整数相加算法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。