大数加法
大数加法
题目链接:牛客 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();
}
}