大数加法

大数加法

题目链接:牛客 BM86
描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。

示例

输入:"1","99"
返回值:"100"
说明:1+99=100

思路
方法一:申请两个栈空间和一个标记位,然后将两个栈中内容依次相加。
 与链表相加类似:7、链表相加
方法二:大数类型的题目可以用java的BigInteger直接过。

代码
方法一:

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // 将两个字符串入栈
        LinkedList<Integer> stack1 = new LinkedList<>();
        LinkedList<Integer> stack2 = new LinkedList<>();
        putDatta(stack1, s);
        putDatta(stack2, t);
        // 标记进位
        int carry = 0;
        String str = "";
        while (!stack1.isEmpty() || !stack2.isEmpty() || carry != 0) {
            int x = stack1.isEmpty() ? 0 : stack1.pop();
            int y = stack2.isEmpty() ? 0 : stack2.pop();
            int sum = x + y + carry;
            // 更新进位
            carry = sum / 10;
            // 拼接字符串
            str = sum % 10 + str;
        }
        return str;
    }

    public static void putDatta(LinkedList<Integer> stack, String s) {
        for (int i = 0; i < s.length(); i++) {
            stack.push(s.charAt(i) - '0');
        }
    }
}

方法二:
用BigInteger是投机取巧的做法,面试时这么干会被面试官喷。

import java.util.*;
import java.math.BigInteger;

public class Solution {
    public String solve (String s, String t) {
        BigInteger b1 = new BigInteger(s);
        BigInteger b2 = new BigInteger(t);
        return b1.add(b2).toString();
    }
}
posted @ 2024-10-31 17:08  dwhere  阅读(3)  评论(0编辑  收藏  举报