編程實現大數的加法。編程
好比說,給出兩個數a,b,它們各自的位數都大於1000(用String來表示)。這時候,咱們發現,用任何一種數據類型都不足以表示這兩個數,更別說表示這兩個數之和了。所以,咱們能夠用換一種方式,經過兩個數組來分別表示這兩個數,而後把兩個數組對應位置的元素各自相加,則可求得兩個數之和。數組
這樣處理的難點在於對齊。咱們知道,加法是從低位開始相加的,轉換成數組的話,若是是正常處理,則可能須要在較小數的前面補0,處理起來略微麻煩,所以咱們能夠經過翻轉這個數,把高位放在數組的後面,這樣就不須要另外去補0了。app
另一個難點是進位。個人想法是,在求出各個位置相加的和以後,再做處理。若是當前位置上的元素>9,則須要向後進位(由於此時數已經被翻轉了)。ui
實現代碼以下:spa
public class Main { public static void main(String[] args) { String a = null; String b = null; Scanner sc = new Scanner(System.in); a = sc.nextLine(); b = sc.nextLine(); System.out.println(getRes(a, b)); } public static String getRes(String a, String b) { char[] large = null; char[] small = null; if(a.length() > b.length()) { large = a.toCharArray(); small = b.toCharArray(); }else { large = b.toCharArray(); small = a.toCharArray(); } int len = a.length(); int[] sum = new int[len]; //把這個數倒過來,處理起來比較方便 for(int i = 0; i < len; i++) { sum[i] = large[len-1-i] - '0'; } for(int j = 0; j < small.length; j++) { sum[j] += (small[small.length-1-j] - '0'); } //進位,當sum數組上的元素大於9時,則說明這個位置須要向前進位,可是因爲咱們前面把數倒過來,因此在這裏是向後進位 for(int k = 0; k < len - 1; k++) { if(sum[k] > 9) { sum[k+1] += sum[k]/10; sum[k] = sum[k] % 10; } } StringBuilder sb = new StringBuilder(); //把數組元素翻轉,則可求得須要的結果 for(int k = len-1; k >= 0; k--) { sb.append(sum[k]); } String res = sb.toString(); //細節處理,若是該字符串的首位爲0,則證實沒有進位,應該把0給去掉 if(res.charAt(0) == '0') { res = res.substring(1); } return res; }