两个大数相加(Java)* 1、是整数;* 2、两个数无限大,long都装不下;* 3、不能用BigInteger;* 4、不能用任何包装类提供的运算方法;* 5、两个数都是以字符串的方式提供。
 * 思路:* 字符串逐位相加,需要进位则进位处理,考虑两个问题:* 1、char怎么转换为integer, 减去'0'即可* 2、怎么处理对应位相加?反转字符串相加,正确处理进位即可,* 这样个位对应个位,十位对应十位,剩余的直接追加
public class TwoBigIntegerSum {public String twoBigIntegerSum(String str1, String str2) {if (str1 == null || "".equals(str1)) {return str2;}if (str2 == null || "".equals(str2)) {return str1;}StringBuilder sb = new StringBuilder();char[] arr1 = str1.toCharArray();char[] arr2 = str2.toCharArray();int index1 = str1.length() - 1;int index2 = str2.length() - 1;//缓存是否需要进位boolean carry = false;while (index1 >= 0 && index2 >= 0) {char cur1 = arr1[index1];char cur2 = arr2[index2];int sum = cur1 - '0' + cur2 - '0';sum = carry ? sum + 1 : sum;carry = sum >= 10 ? true : false;sb.append((char) ((sum % 10) + '0'));index1--;index2--;}//处理剩余元素while (carry || index1 >= 0 || index2 >= 0) {if (index1 >= 0) {int sum = arr1[index1] - '0' + (carry ? 1 : 0);carry = sum >= 10 ? true : false;sb.append((char) ((sum % 10) + '0'));index1--;}else if (index2 >= 0) {int sum = arr2[index2] - '0' + (carry ? 1 : 0);carry = sum >= 10 ? true : false;sb.append((char) ((sum % 10) + '0'));index2--;}else {sb.append('1');carry = false;}}return sb.reverse().toString();}public static void main(String[] args) {String str1 = "11111112345678911111";String str2 = "2222";System.out.println(new TwoBigIntegerSum().twoBigIntegerSum(str1,str2));System.out.println(new BigInteger(str1).add(new BigInteger(str2)));String str3 = "999928";String str4 = "72";System.out.println(new TwoBigIntegerSum().twoBigIntegerSum(str3, str4));System.out.println(new BigInteger(str3).add(new BigInteger(str4)));}
}

你会用Java实现两个大数相加吗相关推荐

  1. java 加法 溢出_java实现两个大数相加,可能出现溢出错误

    java实现两个大数相加,可能存在溢出,如123456789 + 987654321 返回 1111111110 用BigInteger 三行就完事啊. 不用这个类也可以实现 public BigIn ...

  2. python进行两个大数相加

    python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下: 思路: 1.将超长数转换成字符串 2.进行长度补零,即让两个要计算的字符串长度一样 ...

  3. java三位整数倒序相加_用单向链表实现两数倒序相加(java实现)

    很久没做算法题了,准备重操旧业,于是刷了一波LeetCode,看到一个比较经典的链表算法题,分享出来. 题目 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将 ...

  4. java小学生加减法_大数加减法 - java实现

    计算机处理的各种数据类型都有个范围,超出范围的就处理不了. 如果做超大数运算加减乘除,普通方法肯定是不行的,那么我们遇到大数的运算怎么处理呢?今天介绍一种大数加减乘除运算的方法 思路: 1. 将两个特 ...

  5. java两个时间相加_Java程序两个日期相加

    Java程序两个日期相加 在此程序中,您将学习使用Calendar在Java中两个日期相加. 因为Java纪元是1970年,所以Date对象表示的任何时间都不工作.这意味着,您的日期将从1970年开始 ...

  6. Java 两个数相加的测试_Java 两个数字相加

    1.两个数字相加 Java中将两个数字相加: 例如:int x = 5; int y = 6; int sum = x + y; System.out.println(sum); // 打印输出 x ...

  7. 大数相乘、大数相加、大数相减Java版本

    为什么80%的码农都做不了架构师?>>>    题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...

  8. java控制台两个字符串_java控制台输入字符串

    实验要求: 1/7 1.掌握 JDK 的安装及参数配置方法,能在控制台界面使用 Java 命令进行 Java 程序的编译及运行. 2.掌握 Eclipse 软件安装方法.3.掌握在 ...... 习题 ...

  9. Java计算两个字符串日期之间的天数差

    Java计算两个字符串日期之间的天数差 调用方法: public static void main(String[] args) throws ParseException {String a = & ...

最新文章

  1. Effective C++ 类与函数设计和申明
  2. ASP.NET MVC 第三章 异步提交数据
  3. 全国计算机等级考试c语言程序设计真题,历年全国计算机等级考试二级C语言笔试选择真题...
  4. atoi,atol,strtod,atof
  5. linux lsof 已打开的文件列表
  6. c语言 编码规范 C Coding Standard
  7. python 如何在linux进行调试
  8. 6. Leetcode 11. 盛最多水的容器 (数组-双向双指针)
  9. Python学习笔记:电子邮件,POP3收取邮件
  10. 分别在(ModelAtrs)Ascend、(Ubuntu16.04服务器+18.04镜像)GPU、(Ubuntu18.04)CPU下通过MindSpore实现(cifar10)图像分类
  11. ASP生成静态页面的方法
  12. python下载哪个版本好-python下载哪个版本好
  13. xmind服务器维护,如何使用XMind组织您的待办事项?
  14. 互联网协议理解(入门)
  15. windows必备软件系列
  16. Linux 2038年问题
  17. 大学英语综合教程四 Unit 2 课文内容英译中 中英翻译
  18. 曾经,我以为我很懂MySQL索引
  19. 迎接天翻地覆的重大演变:微软加速器区块链论坛成功举办
  20. 用计算机写作文的好处,第7课 用计算机写作文教案

热门文章

  1. 前端学习(1439):vue的helloworld
  2. 前端学习(1086):构造函数 原型 实例的关系
  3. 前端学习(571):margin负值下的两栏自适应
  4. 前端学习(14):相对路径和绝对路径
  5. linux(3):Linux MBR分区、挂载操作步骤,逻辑卷扩容操作
  6. java学习(75):GUL文本框和标签
  7. 实例51:python
  8. 树莓派移植SX1278 LoRa通信--使用wiringPi 移植GPIO中断
  9. Git之集中式vs分布式
  10. 0x00000000指令引用的内存不能为written_变量和内存访问