把两个只含数字的字符串,按加法相加,然后输出一个字符串得数
可能会出现两个 “99999999999999999999999999999999999999999999” 相加(即long类型都装不下)
不允许使用 BigInteger
思路字符串每个字符按位加起来,再拼成字符串
就像加法算式那样,按位加起来
实现思路代码
public class SumString {
public static void main(String[] args) {
String str1 = "894";
String str2 = "1128";
SumString s = new SumString();
String ans = s.sumStrings(str1, str2);
System.out.println(ans);
}
public String sumStrings(String str1, String str2) {
int len1 = str1.length()-1, len2 = str2.length()-1;
int num1, num2;//str1的数和str2的数
int ten = 0, num;//十位和个位
//利用 StringBuffer 和 StringBuilder 的自增特性
StringBuilder sumStr = new StringBuilder();
//两个字符同时遍历,当有一个遍历完了,或者是进位为0了,就结束遍历
while (len1 >= 0 || len2 >= 0 || ten != 0) {
//接下来从后往前按位取数字
if (len1 >= 0) {//如果大于0,就获取这个数
num1 = str1.charAt(len1) - '0';
} else {//如果等于0,那就等于0
num1 = 0;
}
if (len2 >= 0) {//如果大于0,就获取这个数
num2 = str2.charAt(len2) - '0';
} else {//如果等于0,那就等于0
num2 = 0;
}
//两个数相加的和 sum
int sum = num1 + num2 + ten;
ten = sum / 10;//获取十位数
num = sum % 10;//获取个位数
sumStr.append(num);//把个位加进去
len1--;
len2--;
}
sumStr.reverse();//因为从后往前加的,所以要翻转一下
return sumStr.toString();
}
}
应用代码
public static String addString(String str1,String str2){
int len1 = str1.length()-1,len2 = str2.length()-1;
int num1,num2;//来自两个字符串某位上的数
int ten=0,num=0;//十位和个位
StringBuffer sb = new StringBuffer();
while(len1>=0||len2>=0||ten!=0){
num1 = len1>=0 ? str1.charAt(len1)-'0' : 0;
num2 = len2>=0 ? str2.charAt(len2)-'0' : 0;
int sum = num1 + num2 + ten;
ten = sum / 10;
num = sum % 10;
sb.append(num);
len1--;len2--;
}
sb.reverse();
return sb.toString();
}
禁止转载(勿询问)



