class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param arr string字符串
* @return bool布尔型
*/
string solve(string s, string t) {
int m = t.size();
int n = s.size();
int z; // 获取二者之间的最大长度
if (m > n) {
// 在短字符串前补充0
s = string(m - n, '0') + s;
z = m;
} else {
if (m < n) {
// 在短字符串前补充0
t = string(n - m, '0') + t;
z = n;
} else {
z = m;
}
}
string out;
int c = 0; // 进位
// 从最右的低位开始相加
for (int i = z - 1; i >= 0; i--) {
int a = s[i] - '0';
int b = t[i] - '0';
int d = (a + b + c) % 10;
c = (a + b + c) / 10;
char ch = '0' + d;
out = ch + out;
}
// c为1,最高位需要进位
if (c) {
char ch = '0' + c;
out = ch + out;
}
return out;
}
bool test(string s, int i, int j, int k) {
string s1 = s.substr(i, j - i);
string s2 = s.substr(j, k - j);
if(s1[0] == '0' || s2[0] == '0')
return false;
// unsigned long long i1 = stoull(s1);
// unsigned long long i2 = stoull(s2);
// unsigned long long sum = i1 + i2;
// string s3 = to_string(sum);
string s3 = solve(s1, s2);
int n = s3.length();
if (s3 == s.substr(k, n)) {
if (k + n >= s.length())
return true;
return test(s, j, k, k + n);
}
return false;
}
bool AdditiveArray(string arr) {
// write code here
bool flag = false;
int n = arr.length();
int len = 0;
if (n % 2 == 1) {
len = n / 2;
} else {
len = n / 2 - 1;
}
for (int i = 1; i <= len; ++i) {
for (int j = 1; (i + j) < arr.length(); ++j) {
if (test(arr, 0, i, i + j)) {
return true;
}
}
}
return flag;
}
};