您的位置:首页 > 其它

LeetCode_43---Multiply Strings

2015-06-19 13:44 411 查看
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.

Hide Tags
 Math String

翻译:实现大数乘法,可以参照Integer的乘法方法

private int[] multiplyToLen(int[] x, int xlen, int[] y, int ylen, int[] z) {
int xstart = xlen - 1;
int ystart = ylen - 1;

if (z == null || z.length < (xlen+ ylen))
z = new int[xlen+ylen];

long carry = 0;
for (int j=ystart, k=ystart+1+xstart; j>=0; j--, k--) {
long product = (y[j] & LONG_MASK) *
(x[xstart] & LONG_MASK) + carry;
z[k] = (int)product;
carry = product >>> 32;
}
z[xstart] = (int)carry;

for (int i = xstart-1; i >= 0; i--) {
carry = 0;
for (int j=ystart, k=ystart+1+i; j>=0; j--, k--) {
long product = (y[j] & LONG_MASK) *
(x[i] & LONG_MASK) +
(z[k] & LONG_MASK) + carry;
z[k] = (int)product;
carry = product >>> 32;
}
z[i] = (int)carry;
}
return z;
}


Code:

/**
*
*/
package From41;

import java.math.BigInteger;
import java.util.Arrays;

/**
* @author MohnSnow
* @time 2015年6月19日 上午11:19:39
*
*/
public class LeetCode43 {

/**
* @param argsmengdx
* -fnst
*/
//每次总是纠结于一个位置上只能放一个个位数,其实可以放一个int
//可以参考BigInteger的multiplyToLen方法
//328msA
public static String multiply(String num1, String num2) {
if (num1.equals("0") || num2.equals("0")) {
return "0";
}
int n1Len = num1.length();
int n2Len = num2.length();
int[] result = new int[n1Len + n2Len];
for (int i = n1Len - 1; i >= 0; i--) {
for (int j = n2Len - 1; j >= 0; j--) {
//System.out.println("大数相乘 : " + Arrays.toString(result));
result[i + j + 1] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
}
}
System.out.println("大数temp1 : " + Arrays.toString(result));
int temp = 0;//缓存进位
for (int m = result.length - 1; m >= 0; m--) {
temp = result[m] / 10;
if (temp != 0) {
result[m - 1] += temp;
result[m] = result[m] % 10;
}
}
System.out.println("大数temp2 : " + Arrays.toString(result));
StringBuffer resultStr = new StringBuffer();
for (int a = 0; a < result.length; a++) {
if (result[a] != 0) {
for (int b = a; b < result.length; b++) {
resultStr.append(result[b]);
}
return resultStr.toString();
}
}
return resultStr.toString();
}

public static void main(String[] args) {
String num1 = "52";
String num2 = "60";
BigInteger a = BigInteger.TEN;
System.out.println("大数相乘 : " + multiply(num1, num2));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode 算法