package org.example.interview.practice;
import java.util.Stack;
/**
* @author xianzhe.ma
* @date 2021/9/2
*/
public class NC_1_BIGDATA_ADD {
public static String solve (String s, String t) {
// write code here
int size1 = s.length();
int size2 = t.length();
Stack<String> stack = new Stack<>();
char[] charArray1 = s.toCharArray();
char[] charArray2 = t.toCharArray();
int i = size1 - 1;
int j = size2 - 1;
int remainder = 0;
int temp = 0;
while (i >= 0 && j >= 0) {
char value1 = charArray1[i];
char value2 = charArray2[j];
temp = Integer.valueOf(String.valueOf(value1)) + Integer.valueOf(String.valueOf(value2));
if (temp + remainder > 9) {
temp = (temp + remainder) %10;
remainder = 1;
} else {
temp = temp + remainder;
remainder = 0;
}
stack.push(String.valueOf(temp));
i--;
j--;
}
//循环结束,且两组字符串都处理完了,查看有没有进位
if (i <0 && j < 0) {
if (remainder == 1) {
stack.push(String.valueOf(remainder));
}
}
//某一个字符有剩余继续处理
if ( i >=0) {
String s1 = s.substring(0,i+1);
if (remainder > 0) {
char[] arr1 = s1.toCharArray();
int size = s1.length();
Integer temp1 = 0;
for (int k=size-1;k>=0;k--) {
temp1 = Integer.valueOf(String.valueOf(arr1[k]));
temp1 = temp1 + remainder;
remainder = temp1 / 10;
temp1 = temp1 % 10;
stack.push(String.valueOf(temp1));
}
if (remainder > 0) {
stack.push(String.valueOf(remainder));
}
} else {
stack.push(s1);
}
}
//某一个字符有剩余继续处理
if ( j >=0) {
String s1 = t.substring(0,j+1);
if (remainder > 0) {
char[] arr1 = s1.toCharArray();
int size = s1.length();
Integer temp1 = 0;
for (int k=size-1; k>=0; k--) {
temp1 = Integer.valueOf(String.valueOf(arr1[k]));
temp1 = temp1 + remainder;
remainder = temp1 / 10;
temp1 = temp1 % 10;
stack.push(String.valueOf(temp1));
}
if (remainder > 0) {
stack.push(String.valueOf(remainder));
}
} else {
stack.push(s1);
}
}
StringBuilder strBuilder = new StringBuilder();
while (!stack.isEmpty()) {
strBuilder.append(stack.pop());
}
return strBuilder.toString();
}
public static void main (String[] args) {
String s1 = "733064366";
String s2 = "459309139";
System.out.println(solve(s1, s2));
String newStr = String.join("-", s1, s2);
System.out.println(newStr);
}
}