题目
字符串相乘,乘数位正,可以任意大。
代码
public class Solution {
public String multiply(String num1, String num2) {
if(num1 == null || num2 ==null ){
return null;
}
if(num1.equals("0") || num2.equals("0")){
return "0";
}
int n1 = num1.length();
int n2 = num2.length();
StringBuffer ans = new StringBuffer();
for(int i=n1-1;i>=0;i--){
StringBuffer cur = new StringBuffer();
for(int k=0;k<n1-1-i;k++){
cur.append("0");
}
int c =0;
char c1 = num1.charAt(i);
int[] tempans = new int[2];
for(int j=n2-1;j>=0;j--){
char c2 = num2.charAt(j);
times(tempans,c1,c2,c);
cur.append(tempans[0]);
c = tempans[1];
}
if(c>0){
cur.append(c);
}
ans = sum(ans,cur);
}
return new String(ans.reverse());
}
public StringBuffer sum(StringBuffer sb1,StringBuffer sb2){
int n1 = sb1.length();
int n2 = sb2.length();
int c=0;
int i=0;
int j=0;
StringBuffer ans = new StringBuffer();
while(i<n1 && j<n2){
int c1 = sb1.charAt(i)-'0';
int c2 = sb2.charAt(j)-'0';
int sum = c1+c2+c;
ans.append(sum%10);
c = sum/10;
i++;
j++;
}
if(i!=n1){
while(i<n1){
int c1 = sb1.charAt(i)-'0';
int sum = c1+c;
ans.append(sum%10);
c = sum/10;
i++;
}
}
if(j!=n2){
while(j<n2){
int c2 = sb2.charAt(j)-'0';
int sum = c2+c;
ans.append(sum%10);
c = sum/10;
j++;
}
}
if(c!=0){
ans.append(c);
}
return ans;
}
public void times(int[] tempans, char c1,char c2 ,int c){
int a1 = c1-'0';
int a2 = c2-'0';
int timesAns = a1*a2+c;
tempans[0]=timesAns%10;
tempans[1]=timesAns/10;
}
}
思路
1解法就是按照乘法原理来做。
2 细节上面 a 注意string.equals() b while时候i++ j++不要遗忘