意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

任意大整数的相加运算

来源:恒创科技 编辑:恒创科技编辑部
2024-01-29 08:57:59

  大家好,今天我给大家带来了一个小程序,它实现了对两个任意大整数的相加运算。

   我们知道,在Java中对整数进行运算可以使用int类型,如果范围不够,可以使用long,再大可以使用double,如果想对更大的整数运算可以使用BigInteger类。今天,我们就自己来编写一段程序,实现对两个任意大的整数的加法运算。

   本文将按照以下的步骤讲解:


任意大整数的相加运算

  1. 实现思路

  2. 完整代码清单

  3. 结束语

  一. 实现思路

  1.1 存储方式

   由于要表示一个很大的数字,所以,不能用基本类型存储。这里我们使用String存储,例如:

Strings1="1234567890123456789012345";Strings2="66666666666666666666";

  1.2 运算方式

   很显然,两个String类型不能做加法运算,所以我们要逐一截取出两个字符串的最后两个数字,然后将它们转换为int类型再做加法运算,并将结果再存储到一个新的结果字符串中,这样从低位到高位,依次相加,最后的结果字符串中就是相加结果。我们先看一个简单的例子。

  1.3 简单示例

  - 例如有以下两个存储了数字的字符串:

Strings1="1234";Strings2="18";

  - 我们要截取出两个字符串的最低位4和8,并转换为int值,然后进行加法运算。但这里涉及到一个“进位”的问题,如果4 + 8,应该是:进1落2,如果是4 + 3,应该表示为:进0落7,所以我们要定义变量这个“进位”的值。

Stringresult="";//存储结果字符串intc=0;//存储进位的值//截取两个字符串的最末尾数字Stringr1=s1.substring(s1.length()-1);Stringr2=s2.substring(s2.length()-1);//将最后一位的字符串转换为int值intn1=Integer.parseInt(r1);intn2=Integer.parseInt(r2);//相加intv=n1+n2;//取出个位,并添加到result字符串中result+=v%10;//取出进位值,存储到c中c=v/10;//更改两个字符串,分别去掉最后一位s1=s1.substring(0,s1.length()-1);s2=s2.substring(0,s2.length()-1);//测试打印System.out.println("结果字符串:"+result);System.out.println("进位值:"+c);System.out.println("s1去掉最后一位:"+s1);System.out.println("s2去掉最后一位:"+s2);

  程序运行后,打印结果为:

  ~~~java

  结果字符串:2

  进位值:1

  s1去掉最后一位:123

  s2去掉最后一位:1

  ~~~

   根据这个思路,我们就可以使用一个循环,从低位到高位分别计算每位的和。

  二. 完整代码清单

packagecom.heima.se;/***大整数加法运算*1、弹出两个大整数最后面的整数*2、用这两个整数以及进位值求和*3、求和的整数个位计算结果,添加到结果中;十位为进位值,下一次循环使用。*/publicclassBigIntegerAddition{publicstaticvoidmain(String[]args){//1234634556790123455679011Strings1="1234567890123456789012345";Strings2="66666666666666666666";System.out.println(add(s1,s2));}/***大整数加法运算*@params1*@params2*@return*/publicstaticStringadd(Strings1,Strings2){Stringresult="";//结果intc=0;//进位值,例如两个个位数相加有进位,那么c表示的就是进位while(!s1.isEmpty()||!s2.isEmpty()||c>0){//如果两个整数以及进位都为空,那么就结束循环intnum1=0;//第一个整数当前位的值,默认为0if(!s1.isEmpty()){//如果第一个整数不为空num1=Integer.parseInt(s1.substring(s1.length()-1));//获取最后一个字符转换成整数s1=s1.substring(0,s1.length()-1);//获取后删除最后一个字符}intnum2=0;//第二个整数当前位的值,默认为0if(!s2.isEmpty()){num2=Integer.parseInt(s2.substring(s2.length()-1));s2=s2.substring(0,s2.length()-1);}intres=num1+num2+c;//计算两个整数当前位及进位的和result=res%10+result;//因为res可能会有进位,所以res可能会是两位数,所以只取个位,所以模10,然后再与之前的结果连接c=res/10;//保存进位的结果,在下一次循环时使用。}returnresult;}}

  三. 结束语

   在今天这个程序中,我们仅仅使用了String类及Integer类的一些相关方法就实现了两个任意大整数的相加,通过循环,从低位到高位,逐位数字的累加,并将结果存储到一个新字符串中,是不是很简单!后续的文章,我会为大家带来更多、更有趣、更实用的一些案例,请大家持续关注哦!

上一篇: 控制台打印日历 下一篇: 手机怎么远程登录云服务器?