兩個數相加,結果位數最大爲 最大的那個數的位數+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);
}
}