/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算两个数之和 * @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]; }