题目
415. 字符串相加
分析
题目意思是给你两个纯数字 字符串(表示的是一个有意义的正整数),让你算出这两个字符串表示的数字的和,最后返回以字符串表示的结果,其中的过程不能直接将初始给定的两个字符串直接转化为数字。
思路很简单,就是字符串模拟加法,类似的思路可以参考我的这篇博文:高精度算法思路+代码模板
代码
class Solution {
public String addStrings(String num1, String num2) {
// 算出两个字符串的最大有效位数和较短的位数
int max_l = Math.max(num1.length(),num2.length());
int min_l = Math.min(num1.length(),num2.length());
// 将字符串反转(因为加法运算是从低位开始往高位算,即从右往左算,但是我们看数字的顺序是从高位往低位,即从左往右,为了方便计算,我们这里先做一个反转)
num1 = new StringBuffer(num1).reverse().toString();
num2 = new StringBuffer(num2).reverse().toString();
// 将短的那个字符串后面补0,也即在短的字符串数字的高位补0
if(num1.length() != max_l)
{
for(int i = min_l;i < max_l;i++)
{
num1 = num1 + '0';
}
}
if(num2.length() != max_l)
{
for(int i = min_l;i < max_l;i++)
{
num2 = num2 + '0';
}
}
// 开始模拟计算
String res = ""; // 返回结果
int c = 0,sum; // c记录进位的大小(初始为0) sum记录当前位的加和
for(int i = 0;i < max_l;i++)
{
sum = num1.charAt(i)-'0' + num2.charAt(i)-'0' + c;
res = res + sum % 10; //将当前位算好的结果放到最终结果中
c = sum / 10; //计算进位
}
// 如果直到最后算完,发现还有进位,意味着该加法往更高位去进位了,这里要考虑到
if(c!=0)
{
res = res + c;
}
// 将最终结果反转后返回
return new StringBuffer(res).reverse().toString();
}
}