提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
提示:以下是本篇文章正文内容,下面案例可供参考
给定两个字符串形式的非负整数 str1 和str2 ,计算它们的和。
str1 和str2 的长度都小于 5100.
str1 和str2 都只包含数字 0-9.
str1 和str2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
"1234569999"+"56999999"="1291569998"
解题思路:
既然不能转成数字类来运算,那就逐位运算,对应的位相加,如果大于10,则进位,需要注意的是,我们运算完了之后,得到的字符串是倒序的,正确的结果要进行反转。
代码示例:
public void test() {
String str1 = "1234569999";
String str2 = "56999999";
// 第一个大数的长度
int lenth1 = str1.length();
// 第二个大数的长度
int lenth2 = str2.length();
// 记录相同的位相加之后超过10的部分, 初始为0
int over = 0;
// 利用栈的先进后出, 来记录运算后的结果位
Stack stack = new Stack<>();
// 个位数字位于高位, 所以从高位到低位运算, 假设str1比str2长
while(lenth1-- > 0){
// 提取指定位, 转成数字
int left = str1.charAt(lenth1) - '0';
lenth2--;
// 提取指定位, 转成数字
int right = lenth2 >= 0 ? str2.charAt(lenth2) - '0' : 0;
// 计算提取位的和
int total = left + right + over;
// 将低于10的部分存于栈中
stack.push(total % 10);
// 将高于10的部分记录在over中, 用于下次运算
over = total / 10;
}
// 存放运算后的各位数字
StringBuilder s = new StringBuilder();
while (!stack.isEmpty()) {
// 弹出数字, 拼接结果
s.append(stack.pop());
}
System.out.println(s);
}
注释已添加,动动手练习练习,简单到有手就行!