- 加法
import java.lang.StringBuilder;
class Solution {
public String addStrings(String num1, String num2) {
int carry = 0;
StringBuilder str = new StringBuilder("");
int i = num1.length() - 1, j = num2.length() - 1;
while(i >= 0 || j >= 0 || carry == 1) {
int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
int n = (n1 + n2 + carry) % 10;
carry = (n1 + n2 + carry) / 10;
str.append(n);
i--;
j--;
}
return str.reverse().toString();
}
}
- 减法
import java.lang.StringBuilder;
public class Solution {
String sub(String num1, String num2) {
boolean isNegative = false;
if(num1.length() < num2.length() || (num1.length() == num2.length() && num1.compareTo(num2) == -1)) {
String temp = num1;
num1 = num2;
num2 = temp;
isNegative = true;
}
StringBuilder res = new StringBuilder();
int i = num1.length() - 1;
int j = num2.length() - 1;
int degrade = 0;
while (i >= 0 || j >= 0) {
int n1 = num1.charAt(i) - '0' - degrade;
int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
int n = n1 >= n2 ? n1 - n2 : n1 + 10 - n2;
degrade = n1 >= n2 ? 0 : 1;
res.append(n);
i--;
j--;
}
//删除前导0
while (res.length() > 1 && res.charAt(res.length() - 1) == '0') {
res.deleteCharAt(res.length() - 1);
}
return isNegative ? "-" + res.reverse().toString() : res.reverse().toString();
}
}
- 乘法
import java.lang.StringBuilder;
class Solution {
public String multiply(String num1, String num2) {
if(num1.equals("0") || num2.equals("0")) {
return "0";
}
if(num1.length() < num2.length()) {
String temp = num1;
num1 = num2;
num2 = temp;
}
String sum = null;
int digit = 0;
for(int i = num2.length() - 1; i >= 0; i--) {
int carry = 0;
StringBuilder num = new StringBuilder();
//十位以上需要补0
for(int k = 0; k < digit; k++) {
num.append(0);
}
for(int j = num1.length() - 1; j >= 0; j--) {
int n2 = num2.charAt(i) - '0';
int n1 = num1.charAt(j) - '0';
int n = (n2 * n1 + carry) % 10;
carry = (n2 * n1 + carry) / 10;
num.append(n);
}
if(carry != 0) {
num.append(carry);
}
//求和
if(sum != null) {
sum = add(sum, num.reverse().toString());
} else {
sum = num.reverse().toString();
}
digit++;
}
return sum;
}
private String add(String num1, String num2) {
StringBuilder res = new StringBuilder();
int carry = 0;
int i = num1.length() - 1;
int j = num2.length() - 1;
while(i >= 0 || j >= 0 || carry == 1) {
int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
int n = (n1 + n2 + carry) % 10;
carry = (n1 + n2 + carry) / 10;
res.append(n);
i--;
j--;
}
return res.reverse().toString();
}
}