Given two numbers represented as strings, return multiplication of the numbers as a string.
Note:
- The numbers can be arbitrarily large and are non-negative.
- Converting the input string to integer is NOT allowed.
- You should NOT use internal library such as BigInteger.
给两个是非负整数的字符串,返回两数之积的字符串.不能使用BigInteger等类库.
就是模拟整数的乘法运算.写的有些麻烦.
public String multiply(String num1, String num2) {
String ans = "0";
if("0".equals(num1) || "0".equals(num2)) {
return "0";
}
String count = "";
for(int i = num1.length() - 1; i >= 0; i--) {
ans = add(multiply(num2, num1.charAt(i)) + count, ans);
count += "0";
}
// 去掉前导零
for(int i = 0; i < ans.length(); i++) {
if(ans.charAt(i) != '0') {
ans = ans.substring(i);
break;
}
}
return ans;
}
// 字符和字符串相乘
public String multiply(String num1, char c2) {
StringBuilder ans = new StringBuilder("");
int c = 0;
int temp;
for(int i = num1.length() - 1; i >= 0; i--) {
temp = (num1.charAt(i) - '0') * (c2 - '0');
ans.insert(0, (temp % 10 + c) % 10);
c = (((temp / 10 + (temp % 10 + c) / 10)) % 10);
}
ans.insert(0, c);
return ans.toString();
}
// 两个字符串相加
public String add(String num1, String num2) {
StringBuilder ans = new StringBuilder("");
int c = 0, temp;
int i = num1.length() - 1;
int j = num2.length() - 1;
for(; i >= 0 && j >= 0; i--, j--) {
temp = num1.charAt(i) - '0' + num2.charAt(j) - '0' + c;
c = temp / 10;
ans.insert(0, temp % 10);
}
for(; i >= 0; i--) {
temp = num1.charAt(i) - '0' + c;
c = temp / 10;
ans.insert(0, temp % 10);
}
for(; j >= 0; j--) {
temp = num2.charAt(j) - '0' + c;
c = temp / 10;
ans.insert(0, temp % 10);
}
if(c != 0)
ans.insert(0, c);
return ans.toString();
}