题解 | #大数加法# StringBuilder + 数学

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String str1, String str2) {
        // write code here
        int aLen = str1.length();
        int bLen = str2.length();
        int maxLen = aLen > bLen ? aLen : bLen;
        int sum[] = new int[maxLen + 1];
        int a[] = new int[maxLen+1];
        Arrays.fill(a,0);
        for(int i=0;i<aLen;i++){
            a[i] = str1.charAt(aLen - i - 1) - '0';
        }
        int b[] = new int[maxLen + 1];
        Arrays.fill(b,0);
        for(int i=0;i<bLen;i++){
            b[i] = str2.charAt(bLen - i - 1) - '0';
        }
        // 计算加权数
        int modNum = 0;
        for(int i = 0;i<maxLen;i++){
            int t = a[i] + b[i] + modNum;
            if(t >= 10){
                sum[i] = t - 10;
                modNum = 1;
            }else{
                sum[i] = t;
                modNum = 0;
            }
        }
        int endIdx = maxLen;
        if(modNum!=0){
            endIdx += 1;
            sum[maxLen] = 1;
        }
        StringBuilder builder = new StringBuilder();
        for(int i=0;i<endIdx;i++){
            if(i == maxLen && sum[i] != 0){
                builder.append("1");
            }else{
                builder.append(String.valueOf(sum[i]));
            }
        }
        return builder.reverse().toString();
    }
}

从后往前计算累加,转化为数字计算,最后转化为字符串

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务