给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
双指针法
较短的字符串高位补0
#define MAX_LEN 5102
char g_result[MAX_LEN];
char* addStrings(char* num1, char* num2)
{
int strlenNum1 = strlen(num1);
int strlenNum2 = strlen(num2);
int len = strlenNum1 > strlenNum2 ? strlenNum1 : strlenNum2;
g_result[len + 1] = '\0';
int value;
int value1;
int value2;
int carry = 0;
while (strlenNum1 != 0 || strlenNum2 != 0) {
if (strlenNum1 != 0) {
strlenNum1--;
value1 = num1[strlenNum1] - '0';
} else {
value1 = 0;
}
if (strlenNum2 != 0) {
strlenNum2--;
value2 = num2[strlenNum2] - '0';
} else {
value2 = 0;
}
value = value1 + value2 + carry;
carry = value / 10;
value %= 10;
g_result[len] = value + '0';
len--;
}
if (carry == 0) {
return &(g_result[1]);
} else {
g_result[0] = '1';
return g_result;
}
}