您的位置:首页 > 其它

LeetCode OJ算法题(四十二):Multiply Strings

2014-08-01 14:44 183 查看
题目:

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.
解法:
本题要求实现大数乘法,可以利用手算乘法的思想,每一位相乘后坐加法,因此我们可以先实现大数加法

大数加法从字符串末尾开始遍历,求出每一对应位相加(还有进位)的和,算出下一位的进位,最后得到sum

一个个位数与大数相乘也可以采用这一思路,最后将所有乘积相加,得到结果

值得注意的是结果会出现000这种情况,这是因为150*0这种计算,会产生100*0 = 000的情况,故在返回结果时从第一个不为0的字符开始

public class No42_MultiplyString {
public static void main(String[] args){
System.out.println(multiply("0", "150"));
}
public static String multiply(String num1, String num2) {
String ret = "";
for(int i=num1.length()-1;i>=0;i--){
String ts = "";
int c = 0;
for(int j=num2.length()-1;j>=0;j--){
int m = (num1.charAt(i)-'0')*(num2.charAt(j)-'0') + c;
c = m / 10;
m = m % 10;
ts = ""+m+ts;
}
if(c>0)
ts = ""+c+ts;
if(!ts.equals("0")){
int k = 0;
while(k<num1.length()-1-i){
k++;
ts += "0";
}
}
ret = sum(ret, ts);
}
//return ret;
int p = 0;
while(p<ret.length()-1 && ret.charAt(p) == '0') p++;
return p<=ret.length()-1?ret.substring(p):"0";
}
public static String sum(String num1, String num2){
if(num1.length()==0 && num2.length() == 0)
return "0";
if(num1.length()==0)
return num2;
if(num2.length()==0)
return num1;
String ret = "";
int c = 0;
int i=num1.length()-1,j=num2.length()-1;
while(i>=0 || j>=0){
int s = (i>=0?(num1.charAt(i)-'0'):0) + (j>=0?(num2.charAt(j)-'0'):0) + c;
c = s / 10;
s = s % 10;
ret = ""+s+ret;
i--;
j--;
}
return c>0?(""+1+ret):ret;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法