43. Multiply Strings

43. Multiply Strings(大数乘法)

思路

模拟乘法运算即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
StringBuffer res = new StringBuffer();
public String multiply(String num1, String num2) {
if(num1.charAt(0)=='0'||num2.charAt(0)=='0') {

return "0";
}
//为了减少计算,把长度比较小的作为乘数
String tmp;
if(num1.length()<num2.length()) {
tmp = num1;
num1 = num2;
num2 = tmp;
}


for(int i = num2.length()-1; i >= 0; i--) {
int j = num2.charAt(i)-'0';
while(j>0) {
plus(num1, num2.length()-i-1);
j--;
}
}

return res.toString();
}

public void plus(String num1, int k) {
//System.out.println("k="+k+"res="+res.toString());
if(res.length()==0) {
res.append(num1);
for(int i=0;i<k;i++)res.append('0');
return;
}
int quotient = 0;
int i,j;
//遇到的错误②
for(i=res.length()-k-1, j=num1.length()-1; i>=0||j>=0; i--,j--) {
int sum = (i<0?0:(res.charAt(i)-'0')) + (j<0?0:(num1.charAt(j)-'0'))+quotient;

quotient = sum/10;
if(i>=0) {
res.setCharAt(i, (char) (sum%10 + '0'));
}else {
res.insert(0, sum%10);
}
//System.out.println("quotient="+quotient+"i="+i+"sum="+sum+"res="+res.toString());
//System.out.println((char) (sum%10 + '0'));
}


if(quotient!=0) {
res.insert(0, quotient);
}

//System.out.println("k="+k+"res:"+res.toString());
}

遇到的问题

  1. 忽略num1=”0”或num2=”0”的情况
  2. 进位错误,原因是在标注2的位置的一部分放到外面导致进位错误
  3. 还有一个错误是字符与数字之间的转换,在StringBuffer中可以直接插入整数,无须转换为字符

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×