参考了网上的一种解题思路,原网址找不到了。。 思路的话仔细看看会明白的,当时举了一个例子按照这个流程跑了下。这个思路还是很清晰的。
代码:
package codes;
public class MultiplyStrings {
public static void main(String[] args) {
String str1 = "9";
String str2 = "99";
System.out.print(new MultiplyStrings().multiply02(str1, str2));
}
// public String multiply(String num1, String num2) {
//
// if(num1.length()>10 || num2.length()>10){
// return "" ;
// }else {
// long temp1 = Long.parseLong(num1);
// long temp2 = Long.parseLong(num2);
// if(temp1>2147483647 || temp2>2147483647)
// return "";
// else
// {
// long res = temp1 * temp2;
//
//
// return res+"";
// }
// }
// }
// public String multiply01(String num1, String num2) {
// num1 = new StringBuilder(num1).reverse().toString();
// num2 = new StringBuilder(num2).reverse().toString();
// // even 99 * 99 is < 10000, so maximaly 4 digits
// int[] d = new int[num1.length() + num2.length()];
// for (int i = 0; i < num1.length(); i++) {
// int a = num1.charAt(i) - '0';
// for (int j = 0; j < num2.length(); j++) {
// int b = num2.charAt(j) - '0';
// d[i + j] += a * b;
// }
// }
// StringBuilder sb = new StringBuilder();
// for (int i = 0; i < d.length; i++) {
// int digit = d[i] % 10;
// int carry = d[i] / 10;
// sb.insert(0, digit);
// if (i < d.length - 1)
// d[i + 1] += carry;
// }
// //trim starting zeros
// while (sb.length() > 0 && sb.charAt(0) == '0') {
// sb.deleteCharAt(0);
// }
// return sb.length() == 0 ? "0" : sb.toString();
//}
public String multiply02(String num1, String num2) {
int len = num1.length()+num2.length();
int res [] = new int [len];
// StringBuffer sb = new
String temp1 = new StringBuffer(num1).reverse().toString();
String temp2 = new StringBuffer(num2).reverse().toString();
for(int i = 0;i < temp1.length();i++){
int a = temp1.charAt(i) - '0';
for(int j = 0;j < temp2.length();j++){
int b = temp2.charAt(j) - '0';
res [i+j] += a * b;
}
}
// for(int i=0;i<res.length;i++){
// System.out.println(res[i]);
// }
// handle the array
StringBuffer sb = new StringBuffer();
for(int i=0 ; i<res.length;i++){
int digit = res[i] % 10;
int carry = res[i] / 10;
sb.insert(0, digit);// 从前面插
if( i<res.length-1){
res[i+1] += carry; //res[i] = digit;
}
}
//reverse
while(sb.length() > 0 && sb.charAt(0) == '0'){
sb.deleteCharAt(0);
}
return sb.length()==0?"0":sb.toString();
}
}