算法題:編程實現大數的乘法

兩個數相乘,結果的最大位數爲兩個數的位數之和
比如有兩個相乘9799,
先把它們的每一位依次相乘
個位結果=7
9=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);
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章