LeetCode 415. Add Strings

本文介绍了一种不使用BigInteger库或直接转换为整数的方法来计算两个以字符串形式给出的非负整数之和。通过模拟手动竖式加法的过程,逐位进行加法运算,并处理进位。

Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.

Note:

  1. The length of both num1 and num2 is < 5100.
  2. Both num1 and num2 contains only digits 0-9.
  3. Both num1 and num2 does not contain any leading zero.
  4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

题意:给定以字符串形式表示的两个非负整数num1和num2,返回这两个整数的和。
Note:
1. num1和num2的长度都小于5100.
2. num1和num2只包含0-9中的数字.
3. num1和num2不存在最高位为0的情况。
4. 不能使用任何内置方法(如BigInteger)或将字符串直接转换为整型。

 

思路:同Add Binary一题。

直接用程序模拟十进制相加的竖式。将进位设置成标志位
1. 从后向前遍历,逐位取出字符串num1,num2的数字a和b,如果长度不足,就用0代替
2. 用carry代表进位
3. a + b + carry除以10,取余代表当前位的结果,取整代表进位
4. 最后循环结束后,如果进位标志carry为1,则代表最高位有进位,对字符串最高位再加1
思想:以十进制为例,在竖式求和里面,对应位的两个数相加,横线下面的数相当于除以10取余;进位的数相当于除以10取整
例: 95
  + 26
 ————
      121

java实现如下:

public String addStrings(String num1, String num2) {
        int len1 = num1.length();
        int len2 = num2.length();
        int maxLen = Math.max(len1, len2);
        int carry = 0;//carry表示进位
        String sum = "";
        for(int i = 0; i < maxLen; i++){
            //从右往左,逐位取数字,长度不足就用0代替
            int a = i < len1 ? num1.charAt(len1 - 1 - i) - '0' : 0;
            int b = i < len2 ? num2.charAt(len2 - 1 - i) - '0' : 0;
            sum = (a + b + carry) % 10 + sum;
            carry = (a + b + carry) / 10;
        }
        if(carry == 1)
            sum = carry + sum;
        return sum;
    }

 

转载于:https://www.cnblogs.com/zeroingToOne/p/8387568.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值