您的位置:首页 > 其它

43 Multiply Strings

2015-09-05 16:31 323 查看
/*
* 用两个String模拟乘法,来完成大数相乘
*/

public class Solution {
public String multiply(String num1, String num2) {
StringBuffer res = new StringBuffer();
if(num1==null||num1.length()==0) return res.toString();
if(num2==null||num2.length()==0) return res.toString();
int tlen1 = num1.length();
int tlen2 = num2.length();
if(num1.charAt(0)=='-'){
--tlen1;
}
if(num2.charAt(0)=='-'){
--tlen2;
}

if(tlen1 > tlen2){
String tmp = num1;
num1 = num2;
num2 = tmp;
}

int flag = 1;
int f1 = 0, f2 = 0;
if(num1.charAt(0)=='-'){
flag = -flag;
f1 = 1;
}

if(num2.charAt(0)=='-'){
flag = -flag;
f2 = 1;
}
int flen1 = num1.length() - 1;
int flen2 = num2.length() - 1;

int p = 0;
for(int i=flen1;i>=f1;--i){
StringBuffer tmp = new StringBuffer();
int f = 0;
int m = (int)(num1.charAt(i) - '0');
for(int j=flen2;j>=f2;--j){
int t1 = (int)(num2.charAt(j) - '0');
int t2 = m*t1 + f;
int t3 = t2%10;
f = t2/10;
tmp.append(t3);
}
if(f!=0){
tmp.append(f);
}
int u1 = p, u2 = 0;
int v = 0;
while(u1<res.length()&&u2<tmp.length()){
int tv1 = (int)(res.charAt(u1) - '0');
int tv2 = (int)(tmp.charAt(u2) - '0');
int tv3 = tv1 + tv2 + v;
int tv4 = tv3%10;
char tvc = (char)(tv4 + '0');
v = tv3/10;
res.setCharAt(u1, tvc);
++u1;
++u2;
}

if(u1<res.length()){
while(u1<res.length()){
int tv1 = (int)(res.charAt(u1) - '0');
int tv3 = tv1 + v;
int tv4 = tv3%10;
char tvc = (char)(tv4 + '0');
v = tv3/10;
res.setCharAt(u1, tvc);
++u1;
}
if(v!=0){
res.append(v);
}
}else if(u2 < tmp.length()){
while(u2 < tmp.length()){
int tv2 = (int)(tmp.charAt(u2) - '0');
int tv3 = tv2 + v;
int tv4 = tv3%10;
char tvc = (char)(tv4 + '0');
v = tv3/10;
res.append(tvc);
++u2;
}
if(v!=0){
res.append(v);
}
}else if(v!=0){
res.append(v);
}
++p;
}

int index = res.length() - 1;
boolean isZero = false;
while(index>=0&&res.charAt(index)=='0'){
--index;
}

if(index<0){
return "0";
}

res = new StringBuffer(res.substring(0, index + 1));

if(flag < 0){
res.append('-');
}
res.reverse();
return res.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: