[Amazon] Big Integer Addition

本文介绍了一种处理两个非负整数字符串相加的方法,通过补零对齐位数,实现逐位相加并处理进位,最终返回两数之和的字符串形式。适用于整数长度不超过5100的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

Given num1 = "123", num2 = "45"
return "168"

思路:把长度短的字符串用0补齐位数,从最后一位开始借位相加,反转即可。

分析:"123"和"045"

public class Solution {
    /**
     * @param num1 a non-negative integers
     * @param num2 a non-negative integers
     * @return return sum of num1 and num2
     */
    public String addStrings(String num1, String num2) {
        StringBuffer sb=new StringBuffer();
        int len=Math.max(num1.length(),num2.length());
        int carry=0;
        for(int i=len-1;i>=0;i--){
            if(num1.length()<num2.length()){
                for(int j=num1.length();j<num2.length();j++){
                    num1="0"+num1;
                }
            }
            if(num1.length()>num2.length()){
                for(int j=num2.length();j<num1.length();j++){
                    num2="0"+num2;
                }
            }
            char c1=num1.charAt(i);
            char c2=num2.charAt(i);
            int digit=(carry+(c1-'0')+(c2-'0'))%10;
            sb.append(digit);
            carry=(carry+(c1-'0')+(c2-'0'))/10;
        }
        
        if(carry!=0){
            sb.append(carry);
        }
        
        return sb.reverse().toString();
    }
}

第二遍

public class Solution {
    /**
     * @param num1 a non-negative integers
     * @param num2 a non-negative integers
     * @return return sum of num1 and num2
     */
    public String addStrings(String num1, String num2) {
        int diff=Math.abs(num1.length()-num2.length());
        if(num1.length()>num2.length()){
            for(int i=0;i<diff;i++){
                num2="0"+num2;
            }
        }else{
            for(int i=0;i<diff;i++){
                num1="0"+num1;
            }
        }
        
        String result="";
        int carry=0;
        for(int i=num1.length()-1;i>=0;i--){
            int sum=carry+(num1.charAt(i)-'0')+(num2.charAt(i)-'0');          //要注意charAt之后要-'0'
            int digit=sum%10;
            result+=digit;
            carry=sum/10;
        }
        
        if(carry!=0){
            result+=carry;
        }
        return new StringBuffer(result).reverse().toString();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值