問題:
大數相加不能直接使用基本的int類型,因為int可以表示的整數有限,不能滿足大數的要求。可以使用字符串來表示大數,模擬大數相加的過程。
思路:
1.反轉兩個字符串,便於從低位到高位相加和最高位的進位導致和的位數增加;
2.對齊兩個字符串,即短字符串的高位用‘0’補齊,便於后面的相加;
3.把兩個正整數相加,一位一位的加並加上進位。
具體代碼如下:
/** * 用字符串模擬兩個大數相加 * @param n1 加數1 * @param n2 加數2 * @return 相加結果 */ public static String add2(String n1,String n2) { StringBuffer result = new StringBuffer(); //1、反轉字符串 n1 = new StringBuffer(n1).reverse().toString(); n2 = new StringBuffer(n2).reverse().toString(); int len1 = n1.length(); int len2 = n1.length(); int maxLen = len1 > len2 ? len1 : len2; boolean nOverFlow = false; //是否越界 int nTakeOver = 0 ; //溢出數量 //2.把兩個字符串補齊,即短字符串的高位用0補齊 if(len1 < len2) { for(int i = len1 ; i < len2 ; i++) { n1 += "0"; } } else if (len1 > len2) { for(int i = len2 ; i < len1 ; i++) { n2 += "0"; } } //3.把兩個正整數相加,一位一位的加並加上進位 for(int i = 0 ; i < maxLen ; i++) { int nSum = Integer.parseInt(n1.charAt(i) +"") + Integer.parseInt(n2.charAt(i) +""); if(nSum >= 10) { if(i == (maxLen - 1)) { nOverFlow = true; } nTakeOver = 1; result.append(nSum - 10); } else { nTakeOver = 0; result.append(nSum); } } //如果溢出的話表示位增加了 if(nOverFlow) { result.append(nTakeOver); } return result.reverse().toString(); }
測試:
public static void main(String[] args) { String str = add2("911","222"); System.out.println(str); }
結果:
1133
致謝:感謝您的閱讀!