/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
char* solve(char* s, char* t ) {
int len1 = strlen(s);
int len2 = strlen(t);
int len = (len1 > len2 ? len1 : len2) + 2; //+2的含义是:两者相加最多会溢出1位 + 终止符
char* newStr = (char*)malloc(len);
int upToTen = 0; //记录是否需要进位
int sum = 0;
if (s == NULL || t == NULL) {
return NULL;
}
//设置终止符
newStr[len - 1] = '\0';
//设置操作起始点,避开终止符
len--;
len1--;
len2--;
//遍历相加
while (len1 >= 0 || len2 >= 0) {
//字符串数字比普通数字常量要大0x30(即符号'0')
if (len1 < 0) { //数组s已经遍历结束,但t还未结束,因此等同于与0相加
sum = 0 + t[len2] - '0' + upToTen;
} else if (len2 < 0) { //数组t已经遍历结束,但s还未结束,因此等同于与0相加
sum = s[len1] + 0 - '0' + upToTen;
} else {
sum = s[len1] + t[len2] - 2 * '0' + upToTen;
}
//检查是否需要进位
if (sum > 9) {
upToTen = 1;
} else {
upToTen = 0;
}
//按字符串数字形式放入新数组
newStr[--len] = (sum % 10) + '0';
len1--;
len2--;
}
//遍历结束后如果还有进位,则设置最高位为1
if (upToTen == 1) {
newStr[--len] = 1 + '0';
}
return &newStr[len];
}