兩個數相乘,結果的最大位數爲兩個數的位數之和
比如有兩個相乘9799,
先把它們的每一位依次相乘
個位結果=79=63
十位結果爲=(99+79)=144
百位結果=81
結果爲81 144 63
然後依次進位
個位=63%10=3
十位=(144+63/10) %10=0
百位=(81+150/10)%10=6
千位=96/10=9
然後根據該思想編寫算法
package algorithm;
public class Test2 {
public static void main(String[]args) {
String a="689";
String b="3";
char[]large=null;
char[]small=null;
if (a.length()>b.length()) {
large=a.toCharArray();
small=b.toCharArray();
}else {
large=b.toCharArray();
small=a.toCharArray();
}
System.out.println(a.length()+" "+b.length());
int[]multi=new int[a.length()+b.length()];
for(int i=0;i<small.length;i++) {
for (int j = 0; j<large.length; j++) {
int num1=small[small.length-1-i]-'0';//個位對齊
int num2=large[large.length-1-j]-'0';
multi[i+j]+=num1*num2;
System.out.println(multi[i+j]);
}
}
for (int i = 0; i < multi.length; i++) {
System.out.print(multi[i]+" ");
}
for (int i = 0; i < multi.length-1; i++) {
if (multi[i]>9) {
multi[i+1]+=multi[i]/10;
multi[i]%=10;
}
}
System.out.println();
for (int i = 0; i < multi.length; i++) {
System.out.print(multi[i]+" ");
}
StringBuilder stringBuilder=new StringBuilder();
for (int i = 0; i < multi.length; i++) {
stringBuilder.append(multi[multi.length-1-i]);
}
System.out.println();
String result=stringBuilder.toString();
if (result.startsWith("0")) {
result=result.substring(1);
}
System.out.println(result);
}
}