题目描述:
Given two non-negative integers num1
and num2
represented as string, return the sum ofnum1
and num2
.
注意事项
- The length of both num1 and num2 is < 5100.
- Both num1 and num2 contains only digits 0-9.
- Both num1 and num2 does not contain any leading zero.
- You must not use any built-in BigInteger library or convert the inputs to integer directly.
样例
Given num1 = "123"
, num2 = "45"
return "168"
分析:
老生常谈的加法题 //虽然总是记不住做法== 不能调用API中已有的Integer包里的方法,所以要利用的是ALU加法器的原理:
代码:
public String addStrings(String num1, String num2) {
// 利用的是ALU加法器的原理
if(num1.equals("0")){
return num2;
}
if(num2.equals("0")){
return num1;
}
int len1 = num1.length();
int len2 = num2.length();
int len = Math.max(len1,len2);
char[] result = new char[len+1]; //建立一个char数组来保存结果,多一位为进位
for(int k=0;k<len+1;k++){
result[k] = '0';
}
int p=0, X=0, Y=0;
for(int i=0; i<len+1;i++){
if(i<len1){
X = num1.charAt(len1-i-1)-'0';
}else{
X = 0;
}
if(i<len2){
Y = num2.charAt(len2-1-i)-'0';
}else{
Y = 0;
}
int temp = X + Y + p; // p是下一位的进位
result[len-i] = (char) (temp % 10 + '0'); //本位和
p = temp/10; //求进位
}
int count = 0;
for(;count<len+1;count++){
if(result[count]!='0'){
break;
}
}
String res = "";
for(int i =count;i<len+1;i++){
res += result[i];
}
return res;
}