415.字符串相加
代码
public String addStrings(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int i = num1.length()-1,j = num2.length()-1,tmp = 0;
while (i >= 0 || j >=0 || tmp > 0) {
if (i >= 0) tmp += num1.charAt(i--) - '0';
if (j >= 0) tmp += num2.charAt(j--) - '0';
sb.append(tmp%10);
tmp /= 10;//进位
}
return sb.reverse().toString();
}
43.字符相乘
代码
public String multiply(String num1, String num2) {
if (num1 == null || num2 == null || num1.length() == 0 || num2.length() == 0) return "";
if (num1.charAt(0) == '0' || num2.charAt(0) == '0') return "0";
int carryIn = 0;//进位
int n = num1.length();
int m = num2.length();
List<String> store = new ArrayList<>();//用来保存每位乘法结果的
for (int k = m-1; k >= 0; k--) {//逐位相乘
StringBuilder sb = new StringBuilder();//用来记录每次计算过程的
carryIn = 0;
int i = n-1;
while (i >= 0 || carryIn > 0){
if (i >= 0) carryIn += (num2.charAt(k)-'0')*(num1.charAt(i--)-'0');
sb.append(carryIn%10);
carryIn /= 10;
}
store.add(sb.reverse().toString());
}
StringBuilder ans = new StringBuilder();
String lastStr = store.get(0);
for (int k = 1; k < store.size(); k++) {
StringBuilder sb = new StringBuilder();
carryIn = 0;
int index1=lastStr.length()-1;
int index2=store.get(k).length()-1;
lastStr.substring(index1-k+1,index1+1);
String curStr = store.get(k);
int cnt = 1;
while (cnt <= k){
sb.append(lastStr.charAt(index1-cnt+1));
cnt++;
}
index1 -= k;
while (index1 >= 0 || index2 >= 0 || carryIn > 0){
if (index1 >= 0) carryIn += lastStr.charAt(index1--) - '0';
if (index2 >= 0) carryIn += curStr.charAt(index2--) - '0';
sb.append(carryIn % 10);
carryIn /= 10;
}
lastStr = sb.reverse().toString();
}
return lastStr;
}