NC10题解 | #大数乘法#
大数乘法
http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
参考了前面楼层的
346:对应数组[3,4,6] s
25: 对应数组[2,5] t
res[] = new int[5] = [0,0,0,0,0]
0,1,2,3,4
res[i+j+1] = s[i]*t[j]
比如:
res[4] = s[2]*t[1] = 6*5=30
res[3] = s[2]*t[0] +s[1]*t[1] = 6*2+4*5=32
依次类推...
代码:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
int lenS = s.length();
int lenT = t.length();
int[] ss = new int[lenS];
int[] tt = new int[lenT];
for(int i = 0; i < lenS; i++){
ss[i] = s.charAt(i)-'0';
}
for(int j = 0; j < lenT; j++){
tt[j] = t.charAt(j)-'0';
}
int[] res = new int[lenS+lenT];
for(int i = 0; i < lenS; i++){
for(int j = 0; j < lenT; j++){
res[i+j+1] = ss[i] * tt[j] + res[i+j+1];
}
}
int carry = 0;
for(int i = lenS+lenT-1; i >= 0; i--){
res[i]+=carry;
carry=res[i]/10;
res[i] = res[i]%10;
}
//去掉前面的0 比如多个0000,要结果为0
int cur = 0;
while(cur < lenS+ lenT && res[cur] == 0){
cur++;
}
StringBuilder sb = new StringBuilder();
for(int i = cur; i<res.length; i++){
sb.append(res[i]);
}
return sb.length() == 0 ? "0" : sb.toString();
}
}