java 将两个字符串做数字相加,并返回字符串

题目描述:传入的两个字符串都不能转为整型或长整型直接相加。

import java.util.LinkedList;

/**
 * @author mazhen
 * @className Test
 * @Description 将两个字符串做数字相加,并返回字符串
 * @date 2021/4/9 19:38
 */
public class Test {

    public static String strSum (String str1,String str2) {
        if (null == str1 || null == str2) {
            return null;
        }
        char[] chars1 = str1.toCharArray();
        char[] chars2 = str2.toCharArray();
        LinkedList<Integer> intList1 = new LinkedList<>();
        LinkedList<Integer> intList2 = new LinkedList<>();
        for (char value : chars1) {
            intList1.add(Integer.parseInt(String.valueOf(value)));
        }
        for (char c : chars2) {
            intList2.add(Integer.parseInt(String.valueOf(c)));
        }
        int sum; //逆序遍历的每一位之和
        int more = 0;//逆序遍历的每一位之和后的进位
        LinkedList<Integer> resultList = new LinkedList<>();
        while (!intList1.isEmpty() || !intList2.isEmpty()) {
            Integer int1 = intList1.pollLast(); //从尾部取
            Integer int2 = intList2.pollLast(); //从尾部取
            sum = (null == int1 ? 0 : int1) + (null == int2 ? 0 : int2) + more;
            more = sum/10;
            sum = sum%10;
            resultList.addFirst(sum);
        }
        if (more > 0) {
            //最后记得把进位放入队列
            resultList.addFirst(more);
        }
        StringBuilder sb = new StringBuilder();
        for (Integer integer : resultList) {
            sb.append(integer);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        String str1 = "876";
        String str2 = "9834";
        System.out.println(strSum(str1,str2));
    }

}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值