题目描述:传入的两个字符串都不能转为整型或长整型直接相加。
import java.util.LinkedList;
/**
* @author mazhen
* @className Test
* @Description 将两个字符串做数字相加,并返回字符串
* @date 2021/4/9 19:38
*/
public class Test {
public static String strSum (String str1,String str2) {
if (null == str1 || null == str2) {
return null;
}
char[] chars1 = str1.toCharArray();
char[] chars2 = str2.toCharArray();
LinkedList<Integer> intList1 = new LinkedList<>();
LinkedList<Integer> intList2 = new LinkedList<>();
for (char value : chars1) {
intList1.add(Integer.parseInt(String.valueOf(value)));
}
for (char c : chars2) {
intList2.add(Integer.parseInt(String.valueOf(c)));
}
int sum; //逆序遍历的每一位之和
int more = 0;//逆序遍历的每一位之和后的进位
LinkedList<Integer> resultList = new LinkedList<>();
while (!intList1.isEmpty() || !intList2.isEmpty()) {
Integer int1 = intList1.pollLast(); //从尾部取
Integer int2 = intList2.pollLast(); //从尾部取
sum = (null == int1 ? 0 : int1) + (null == int2 ? 0 : int2) + more;
more = sum/10;
sum = sum%10;
resultList.addFirst(sum);
}
if (more > 0) {
//最后记得把进位放入队列
resultList.addFirst(more);
}
StringBuilder sb = new StringBuilder();
for (Integer integer : resultList) {
sb.append(integer);
}
return sb.toString();
}
public static void main(String[] args) {
String str1 = "876";
String str2 = "9834";
System.out.println(strSum(str1,str2));
}
}