网站首页 > java教程 正文
大家好,今天我给大家带来了一个小程序,它实现了对两个任意大整数的相加运算。
我们知道,在Java中对整数进行运算可以使用int类型,如果范围不够,可以使用long,再大可以使用double,如果想对更大的整数运算可以使用BigInteger类。今天,我们就自己来编写一段程序,实现对两个任意大的整数的加法运算。
本文将按照以下的步骤讲解:
- 实现思路
- 完整代码清单
- 结束语
一. 实现思路
1.1 存储方式
由于要表示一个很大的数字,所以,不能用基本类型存储。这里我们使用String存储,例如:
String s1 = "1234567890123456789012345";
String s2 = "66666666666666666666";
1.2 运算方式
很显然,两个String类型不能做加法运算,所以我们要逐一截取出两个字符串的最后两个数字,然后将它们转换为int类型再做加法运算,并将结果再存储到一个新的结果字符串中,这样从低位到高位,依次相加,最后的结果字符串中就是相加结果。我们先看一个简单的例子。
1.3 简单示例
- 例如有以下两个存储了数字的字符串:
String s1 = "1234";
String s2 = "18";
- 我们要截取出两个字符串的最低位4和8,并转换为int值,然后进行加法运算。但这里涉及到一个“进位”的问题,如果4 + 8,应该是:进1落2,如果是4 + 3,应该表示为:进0落7,所以我们要定义变量这个“进位”的值。
String result = "";//存储结果字符串
int c = 0;//存储进位的值
//截取两个字符串的最末尾数字
String r1 = s1.substring(s1.length() - 1);
String r2 = s2.substring(s2.length() - 1);
//将最后一位的字符串转换为int值
int n1 = Integer.parseInt(r1);
int n2 = Integer.parseInt(r2);
//相加
int v = 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);
程序运行后,打印结果为:
结果字符串:2
进位值:1
s1去掉最后一位:123
s2去掉最后一位:1
根据这个思路,我们就可以使用一个循环,从低位到高位分别计算每位的和。
二. 完整代码清单
package com.heima.se;
/**
* 大整数加法运算
* 1、弹出两个大整数最后面的整数
* 2、用这两个整数以及进位值求和
* 3、求和的整数个位计算结果,添加到结果中;十位为进位值,下一次循环使用。
*/
public class BigIntegerAddition {
public static void main(String[] args) {//1234634556790123455679011
String s1 = "1234567890123456789012345";
String s2 = "66666666666666666666";
System.out.println(add(s1, s2));
}
/**
* 大整数加法运算
* @param s1
* @param s2
* @return
*/
public static String add(String s1, String s2) {
String result = "";//结果
int c = 0;//进位值,例如两个个位数相加有进位,那么c表示的就是进位
while(!s1.isEmpty() || !s2.isEmpty()|| c > 0) {//如果两个整数以及进位都为空,那么就结束循环
int num1 = 0;//第一个整数当前位的值,默认为0
if(!s1.isEmpty()) {//如果第一个整数不为空
num1 = Integer.parseInt(s1.substring(s1.length()-1));//获取最后一个字符转换成整数
s1 = s1.substring(0, s1.length()-1);//获取后删除最后一个字符
}
int num2 = 0;//第二个整数当前位的值,默认为0
if(!s2.isEmpty()) {
num2 = Integer.parseInt(s2.substring(s2.length()-1));
s2 = s2.substring(0, s2.length()-1);
}
int res = num1 + num2 + c;//计算两个整数当前位及进位的和
result = res % 10 + result;//因为res可能会有进位,所以res可能会是两位数,所以只取个位,所以模10,然后再与之前的结果连接
c = res / 10;//保存进位的结果,在下一次循环时使用。
}
return result;
}
}
三. 结束语
在今天这个程序中,我们仅仅使用了String类及Integer类的一些相关方法就实现了两个任意大整数的相加,通过循环,从低位到高位,逐位数字的累加,并将结果存储到一个新字符串中,是不是很简单!后续的文章,我会为大家带来更多、更有趣、更实用的一些案例,请大家持续关注哦!
猜你喜欢
- 2024-11-12 java四则混合运算(java混合编程)
- 2024-11-12 java计算s=a+aa+aaa+aaa...a#java
- 2024-11-12 Java 计算Excel工作表的数量(java excel 公式)
- 2024-11-12 Java 计算 1 到 1,000,000 的和(java计算两个日期之间的天数)
- 2024-11-12 一文读懂关于Java BigDecimal如何实现加减乘除运算和比较大小
- 2024-11-12 07-递增、递减运算 (java) 一个视频学会一个编程知识点
- 2024-11-12 教大家如何利用JAVA语言来计算两个数的和
- 2024-11-12 【Java技巧】如何巧妙解决Excel公式迭代计算难题?
- 2024-11-12 JAVA快速入门——布尔运算(java 布尔)
- 2024-11-12 用java计算数学题真的方便(java计算题怎么算)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)