两个大数相加
倒着从低位相加 这样加完之后如果有进位,下次循环就可以考虑加上进位
public String sum(String s1,String s2){
char[] char1 = s1.toCharArray();
char[] char2 = s2.toCharArray();
int flag=0;//记录进位
int i=char1.length,j=char2.length;//记录两个长度 当索引index
StringBuilder sb=new StringBuilder();//记录结果,后面会反转过来
while (--i >= 0 | --j >= 0) {//保证同时拿个位数计算,下次同时拿十位数计算,其中不能用||因为这是逻辑或(会短路) |是按位或(两个都会执行)
//由后往前加 ,这里char转int就直接-’0‘处理了 ,如果其中一个索引遍历完了不会停止,等待另一个索引也小于0结束
int res = (i>=0 ?char1[i]-'0':0) + (j >=0 ?char2[j]-'0':0)+flag;
if (res > 9){ flag = 1; } //更新flag
else { flag = 0; }
sb.append(res%10);//大不大于10都只要个位
}
if(flag==1) sb.append(flag);//两个加完 有可能还有进位,要把最后一个进位加上
return sb.reverse().toString();
}
测试结果:成功!