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

兩個數相加,結果位數最大爲 最大的那個數的位數+1
比如有兩個數字123 21
當兩個數的相應的位都相加,先不進位,從個位開始依次相加
999+99= 9 18 18
然後,再計算進位,個位變爲:18-18/10=8 十位變爲:(18+1)-19/10=9
百位變爲 (9+1)-10/10=0 千位變爲1,結果就是1098
然後根據該思想編寫算法

package algorithm;

import org.junit.Test;

public class Test1 {

	
	public static void main(String []args) {
		String a="2001";
		String b="9999999";
		char[] large=null;
		char[] small=null;
		if (a.length()>b.length()) {
			large=a.toCharArray();
			small=b.toCharArray();			
		} else {
			small=a.toCharArray();
			large=b.toCharArray();
		}
		int[]sums=new int[large.length+1];//最終結果的位數,最高位爲0
		for(int i=0;i<large.length;i++) {
			sums[i]=large[large.length-i-1]-'0';
			
		}
		/*System.out.println();
		  for (int i = 0; i < sums.length; i++) {
			System.out.print(sums[i]+" ");
		}
		System.out.println();*/
		
		for(int i=0;i<small.length;i++) {
			sums[i]+=small[small.length-i-1]-'0';
			
		}
		/*System.out.println();
		  for (int i = 0; i < sums.length; i++) {
			System.out.print(sums[i]+" ");
		}
		System.out.println();*/
		for (int i = 0; i < sums.length; i++) {
			if (sums[i]>=10) {//判斷是否進位
				sums[i+1]+=sums[i]/10;
				sums[i]%=10;
			}
		}
		/*System.out.println();
		  for (int i = 0; i < sums.length; i++) {
			System.out.print(sums[i]+" ");
		}
		System.out.println();*/
		StringBuilder stringBuilder=new StringBuilder();
		for (int i = 0; i < sums.length; i++) {
			stringBuilder.append(sums[sums.length-1-i]);
		}
		System.out.println();
		System.out.println(stringBuilder);
		String result=stringBuilder.toString();
		if (result.startsWith("0")) {
			result=result.substring(1);	
		}
		System.out.println(result);
	}
}

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