一、工具类

import java.util.ArrayList;
import java.util.List;public class CalculateUtil {/*** 计算两个正整数的和,n1+n2*/public static String sum(String n1, String n2) {//若n1和n2位数不一样,则将少的数补0int puchZero = Math.abs(n1.length() - n2.length());String newStr = "";for (int i = 0; i < puchZero; i++) {newStr += 0;}if (n1.length() > n2.length()) {n2 = newStr + n2;} else {n1 = newStr + n1;}//从个位开始将n1和n2相加,结果放入list中char[] ch1 = n1.toCharArray();char[] ch2 = n2.toCharArray();//下一位进位要加的数int nextAdd = 0;List<Integer> list = new ArrayList<>();for (int i = ch1.length - 1; i >= 0; i--) {int num1 = ch1[i] - '0';int num2 = ch2[i] - '0';int sum = num1 + num2 + nextAdd;if (sum > 9) {if (i != 0) {nextAdd = 1;list.add(sum % 10);} else {list.add(sum);}} else {nextAdd = 0;list.add(sum);}}//翻转list,输出结果String result = "";for (int i = list.size() - 1; i >= 0; i--) {result += list.get(i);}return result;}/*** 计算两个正整数的差,n1-n2*/public static String sub(String n1, String n2) {String symbol = "";if (n1.equals(n2)) {return "0";}//n1Moren2标记n1是否大于n2boolean n1Moren2 = n1.length() > n2.length();if (n1.length() == n2.length() && !n1.equals(n2)) {for (int i = 0; i < n2.length(); i++) {int temN1 = n1.charAt(i) - '0';int temN2 = n2.charAt(i) - '0';if (temN1 != temN2) {n1Moren2 = temN1 > temN2;break;}}}//n1小于n2则交换n1和n2,使n1大于n2if (!n1Moren2) {symbol = "-";String temp = n1;n1 = n2;n2 = temp;}//交换后如果长度不等,则对n2前面补0,使n1和n2的长度相等if (n1.length() != n2.length()) {int puchZero = n1.length() - n2.length();String newStr = "";for (int i = 0; i < puchZero; i++) {newStr += 0;}n2 = newStr + n2;}char[] ch1 = n1.toCharArray();char[] ch2 = n2.toCharArray();String result = "";boolean nextExcuse = false;List<Integer> list = new ArrayList<>();for (int i = ch1.length - 1; i >= 0; i--) {int num1 = ch1[i] - '0';int num2 = ch2[i] - '0';if (!nextExcuse) {//该位没被借位过if (num1 >= num2) {list.add(num1 - num2);} else {nextExcuse = true;list.add(10 + num1 - num2);}} else {//该位被借位过if (num1 > num2) {list.add(num1 - 1 - num2);nextExcuse = false;} else {list.add(9 + num1 - num2);}}}//去除最开始的连续0,输出结果int zeroPostion = -1;for (int i = list.size() - 1; i >= 0; i--) {if (list.get(i) != 0) {break;}if (i >= 1 && list.get(i - 1) != 0) {zeroPostion = i;break;}}int startPostion = zeroPostion == -1 ? list.size() - 1 : zeroPostion - 1;for (int i = startPostion; i >= 0; i--) {result += list.get(i);}return symbol + result;}
}

二、测试

public class MainServer {public static void main(String[] args) {String n1 = "1009901999998809979999999999";String n2 = "989096189599989309877571236897";System.out.println("和:"+CalculateUtil.sum(n1, n2));System.out.println("差:"+CalculateUtil.sub(n1, n2));}
}

输出:

和:990106091599988119857571236896
差:-988086287599990499897571236898

java 大数加减算法相关推荐

  1. java calendar 比较大小_关于Java日期加减,并且比较大小的方法

    关于Java日期加减,并且比较大小的方法 一.首先Java日期加减我使用的是Calendar类,非常方便好用!,话不多说直接上代码 1.获取calendar对象,并不是直接new出来 Calendar ...

  2. node-rsa 加减密与java rsa加减密 互调 相互加减密

    注意:每次rsa加密产生的密文是不一样的,不同的密文解密可以得到相同的内容. 注意:每次rsa加密产生的密文是不一样的,不同的密文解密可以得到相同的内容. 1.公钥与私钥的生成 使用node-rsa来 ...

  3. java日期加减秒_Java日期——年、月、日、时、分、秒、周加减计算

    Java日期--年.月.日.时.分.秒.周加减计算 Java日期--年.月.日.时.分.秒.周加减计算 1.Pom依赖 joda-time joda-time 2.9.9 2.示例代码 package ...

  4. java时间加减_java时间加减

    展开全部 1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...

  5. JAVA 日期加减计算

    1.获取当前系统时间     Date date = new Date(); 2.实现时间的加减的两种方法 第一种:  用java.text.SimpleDateFormat来实现 SimpleDat ...

  6. java 日期加减天数、月数、年数的计算方式

    因为某个项目需要统计 近1周.近1个月.近6个月 等数据,所以在时间的加减上面想了很多方式,最后决定用java.util.Calendar java.util.Calendar ,提供了计算时间的方式 ...

  7. java date 加减一天_java日期加减操作

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); Sys ...

  8. java 时间加减_java如何实现当前时间加减30分钟的方法

    java如何实现当前时间加减30分钟的方法 发布时间:2020-08-17 09:41:34 来源:亿速云 阅读:280 作者:小新 这篇文章主要介绍java如何实现当前时间加减30分钟的方法,文中介 ...

  9. 实现JAVA时间加减的两种方法

    JAVA的时间加减 1.获取当前系统时间 Date date = new Date(); 2.实现时间的加减的两种方法 第一种: 用java.text.SimpleDateFormat来实现 Simp ...

最新文章

  1. linux 启动2个tomcat,在LINUX中启动多个TOMCAT
  2. Yii框架的form处理
  3. php和python哪个用了开发web好-php与python谁更适合web开发?为什么?
  4. python代码案例详解-Python实现电视里的5毛特效实例代码详解
  5. 消息中间件和JMS介绍
  6. 【知识图谱】知识抽取与挖掘(Ⅱ)
  7. python aes padding_使用PKCS7Padding在python和Node.js之间进行AES加密
  8. theme vscode 护眼_vscode的颜色设置(护眼模式)
  9. vue-cli代理开发
  10. 长时间使用s档有危害吗_空调长时间不清洗竟有这么多危害 你知道吗?
  11. [Yii2] 前台用户与后台用户分离
  12. atitit.设计模式(2) -----查表模式/ command 总结
  13. 测试高中低音的软件6,分别用什么音乐来测试设备的高中低音。
  14. Ring Buffer 原理
  15. win10/11: Windows Audio无法启动 错误 0x80070005:拒绝访问
  16. c语言数组五种排序法:bubble,choise,quick,insert,shell 和js 数组排序sort的区别
  17. 诊断故障码(Diagnostic Trouble Code-DTC)
  18. 互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(十)...
  19. 最新 2022 年云原生Kubernetes 高级面试题大全(持续更新中)
  20. 计算机与小学教学联系论文,湖南自考本科论文从小学计算机教学实践谈学生“主体性”的发展 - 湖南自考生网...

热门文章

  1. 微信公众号运营助手,可以在手机上回复粉丝留言
  2. 直播回顾|关联网络如何反团伙欺诈——标准答案版
  3. 《SolidCAM+SolidWorks 2014中文版数控加工从入门到精通》——第1章 SolidCAM基础 1.1 CAD/CAM基础...
  4. 科技学术论文润色经验——分享1
  5. 阿里一p7员工为了证明自己确实年入百万,晒出了他的工资
  6. 自动回复邮件 html,创意十足的邮件自动回复
  7. 新婚百天,总想说点什么
  8. GPGPU-Sim学习(二)搭建GPGPU-Sim环境(ubuntuServer 10.04 安装GPGPU-Sim)
  9. 两直线平行交叉相乘_向量平行公式和垂直公式
  10. 键盘(键盘基础,按键消息)