编程实现大数的加法。编程
好比说,给出两个数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; }