大数相加
随意给两个字符串类型的数字例如:“123545548”,计算他们的之和
实现思路
将字符串转为字符数组然后将字符转为整形一一相加。难点:进位问题
代码实现
public static String sum(String str1,String str2){
char ch1[] = str1.toCharArray();
char ch2[] = str2.toCharArray();
int ch3[] =new int[(ch1.length>ch2.length)?ch1.length+1:ch2.length+1];//存放结果的数组
int count=0;//进位计数器
boolean flag=false;//数组第一位为0标记
int i =ch1.length-1;
int j=ch2.length-1;
for (int z=ch3.length-1; i >=0&&j>=0;) {//相加数组一样长的部分
int sum1=(ch1[i--]-'0')+(ch2[j--]-'0')+count;//相加结果
ch3[z--]=sum1%10;//留位部分
count=sum1/10;//进位部分
}
for(int z=ch3.length-((ch1.length<ch2.length)?ch1.length:ch2.length)-1;;z--){//复制剩下的部分
if(count!=0&&z>=1){
ch3[z]=(((ch1.length>ch2.length)?ch1[z-1]:ch2[z-1])-'0'+count)%10;
count=(((ch1.length>ch2.length)?ch1[z-1]:ch2[z-1])-'0'+count)/10;
}else if(count==0&&z>=1){
ch3[z]=(((ch1.length>ch2.length)?ch1[z-1]:ch2[z-1])-'0')%10;
flag=true;
}else{
break;
}
}
if(count==0&&ch1.length==ch2.length){//如果第一位未进位去除第一位;
flag=true;
}else if(count!=0){
ch3[0]=count;
}
String ret="";//遍历数组返回字符串
int n=0;
if(flag){
n=1;
}
for(;n<ch3.length;n++){
ret+=ch3[n];
}
return ret;
}