大数相加算法(java)

题目描述:

两个大数相加。
1、是整数;
2、两个数无限大,long都装不下;
3、不能用BigInteger;
4、不能用任何包装类提供的运算方法;
5、两个数都是以字符串的方式提供。

思路:

  1. int类型可表示的整数有限,我们可以把整数变成字符串。
  2. 对于长度可能不同的字符串,先将字符串翻转过来,从最后一位开始相加。
  3. 用一个数组处理进位问题
  4. 有个大数是负数时将其变成正数。
  5. 最后把得出来的值再翻转。

这里整理了两位大佬的解法,供大家瞻仰学习

解法1

来源:

https://www.bilibili.com/read/cv3583229/

代码:在这里插入图片描述

解法2

来源:

https://blog.csdn.net/zangdaiyang1991/article/details/92400058

代码:

package com.codinginterviews.other;
import java.math.BigInteger;

public class BigIntegerAdd {
   

    /**
     * 思路:
     * 字符串逐位相加,需要进位则进位处理,考虑两个问题:
     * 1、char怎么转换为integer, 减去'0'即可
     * 2、怎么处理对应位相加?反转字符串相加,正确处理进位即可,
     *    这样个位对应个位,十位对应十位,剩余的直接追加
     */
    public String add(String str1, String str2) {
   
        // 一个字符串为空 直接返回另外一个
        if (str1 == null || "".equals(str1)) {
   
            return str2;
        }
        if (str2 == null || "".equals(str2)) {
   
            return str1;
        }

        StringBuilder sb = new StringBuilder();

      
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值