请设计一个算法完成两个超长正整数的加法。
输入参数:
String addend:加数
String augend:被加数
返回值:加法结果
思路:两个数相加,可先将两个数长度对齐,短的用0补齐后再计算。两个数相加的结果长度至多为较大的数长度加1。可以用一个数组来存放结果。
public class Main {
public static void main(String[] args) {
System.out.println(new Main().AddLongInteger("99999999999999999999999999999999999999999999999999", "11111111111111111111111"));
}
public String AddLongInteger(String addend, String augend){
int l_add = addend.length();
int l_aug = augend.length();
int len = l_add>l_aug?l_add:l_aug;
int zeros = l_add>l_aug?l_add-l_aug:l_aug-l_add;
/*
* 被加数与加数补齐长度至相同
*/
if(l_add>l_aug){
for(int i = 0;i<zeros;i++){
augend = "0"+augend;
}
}else {
for(int i = 0;i<zeros;i++){
addend = "0"+addend;
}
}
l_add = addend.length();
/*
* 存放结果,两个长度分别为n,m的数相加结果长度不会超过Max(n,m)+1,
*/
int[] result = new int[len+1];
int k = 0;
/*
* G,个位;S,十位。
*/
int G,S;
for(int i = l_add-1;i>=0;i--){
int temp = Integer.parseInt(addend.substring(i,i+1))+Integer.parseInt(augend.substring(i,i+1));
result[k]+=temp;
G = result[k]%10;
S = result[k]/10;
result[k] = G;
result[k+1]+=S;
k++;
}
boolean flag = true;
StringBuilder sb = new StringBuilder();
for(int i = result.length-1;i>=0;i--){
if(result[i]==0&&flag == false){
continue;
}else
{
flag = true;
sb.append(result[i]);
}
}
return sb.toString();
}
}