问题:
大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。
思路:
1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
3.把两个正整数相加,一位一位的加并加上进位。
具体代码如下:
public class bigAddtest {
public static void main(String[] args) {
String aString ="888888555";
String bString ="94858437587576";
String reString=bigAdd(aString, bString);
System.out.println(reString);
}
public static String bigAdd(String stra,String strb) {
StringBuffer res = new StringBuffer();//存放结果
StringBuffer a = new StringBuffer(stra).reverse();//反转字符
StringBuffer b = new StringBuffer(strb).reverse();
int lena = a.length();
int lenb = b.length();
int len=lena>lenb?lenb:lena;
int flag =0,sum=0;
for(int i=0;i<len;i++) {
sum =Integer.parseInt(a.charAt(i)+"")+Integer.parseInt(b.charAt(i)+"")+flag;//int parseInt(String s)转换字符串为整形
res.append(sum>10?sum%10:sum);
flag = sum>10?sum/10:0;
}
if(len ==lena) {
for(int i=lena;i<lenb;i++) {
sum=Integer.parseInt(b.charAt(i)+"")+flag;
res.append(sum);
flag = sum>10?sum/10:0;
}
}
else {
for(int i=lenb;i<lena;i++) {
sum=Integer.parseInt(a.charAt(i)+"")+flag;
res.append(sum);
flag = sum>10?sum/10:0;
}
}
if(flag!=0)
res.append(flag);
return res.reverse().toString();
}
}
返回结果:
94859326476131