Open carloscn opened 1 year ago
相加即可,注意处理进位
static int32_t str_add(char *str1, char *str2, char *str_out)
{
int32_t ret = 0;
size_t str1_len, str2_len, out_len;
size_t min_len = 0, max_len = 0;
size_t i = 0;
size_t carry = 0;
size_t val = 0;
char *max_str = NULL, *min_str = NULL;
UTILS_CHECK_PTR(str1);
UTILS_CHECK_PTR(str2);
UTILS_CHECK_PTR(str_out);
UTILS_CHECK_LEN(str1_len = strlen(str1));
UTILS_CHECK_LEN(str2_len = strlen(str2));
if (str1_len > str2_len) {
max_len = str1_len;
min_len = str2_len;
max_str = str1;
min_str = str2;
} else {
max_len = str2_len;
min_len = str1_len;
max_str = str2;
min_str = str1;
}
memset(str_out, 0, max_len + 1);
for (i = 0; i < max_len; i ++) {
val = (i >= min_len) ? (CHAR_TO_INT(max_str[max_len - i - 1]) + carry) :
(CHAR_TO_INT(max_str[max_len - i - 1]) + \
CHAR_TO_INT(min_str[min_len - i - 1]) + carry);
carry = val / 10, val %= 10;
str_out[i] = INT_TO_CHAR(val);
}
str_out[i] = (carry == 0) ? 0 : INT_TO_CHAR(carry);
out_len = strlen(str_out);
for (i = 0; i < out_len / 2; i ++) {
utils_swap_char(str_out + i, str_out + out_len - i - 1);
}
finish:
return ret;
}
问题描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1: 输入:num1 = "11", num2 = "123" 输出:"134"
示例 2: 输入:num1 = "456", num2 = "77" 输出:"533"
示例 3: 输入:num1 = "0", num2 = "0" 输出:"0"
提示: 1 <= num1.length, num2.length <= 104 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前导零
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/add-strings