36std::string
add_strings(std::string first, std::string second) {
40 int64_t len1 = first.size();
41 int64_t len2 = second.size();
42 std::string zero =
"0";
44 for (int64_t i = 0; i < len2 - len1; i++) {
49 }
else if (len1 > len2) {
50 for (int64_t i = 0; i < len1 - len2; i++) {
57 int64_t length = std::max(len1, len2);
59 for (int64_t i = length - 1; i >= 0; i--) {
60 int64_t firstBit = first.at(i) -
'0';
61 int64_t secondBit = second.at(i) -
'0';
63 int64_t sum = (char(firstBit ^ secondBit ^ carry)) +
'0';
64 result.insert(result.begin(), sum);
66 carry = char((firstBit & secondBit) | (secondBit & carry) |
71 result.insert(result.begin(),
'1');
85std::string
safe_substr(
const std::string &str, int64_t x1, int64_t x2, int64_t n) {
86 int64_t len = str.size();
89 return str.substr(x1, x2);
92 int64_t y1 = x1 - (n - len);
93 int64_t y2 = (x1 + x2 - 1) - (n - len);
98 return str.substr(0, y2 + 1);
100 return str.substr(y1, x2);