题解 | 大数加法
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ #include <stdlib.h> char* solve(char* s, char* t ) { // write code here int len_s = strlen(s); int len_t = strlen(t); if(len_s == 0) return NULL; if(len_t == 0) return NULL; int max_len = (len_s > len_t ? len_s : len_t) + 1;//考虑进位 char* result = (char*)malloc( (max_len + 1) * sizeof(char) ); if(!result) return NULL; result[max_len] = '\0'; int carry = 0; int i = len_s - 1; //t最后一个字符的位置 int j = len_t - 1;//s最后一个字符的位置 int k = max_len - 1;//结果字符串的最后一个字符的位置 while(i >= 0 || j >= 0 || carry) { int sum = carry; if(i >= 0) sum += s[i--] - '0';// -'0'表示转为数字相加 if(j >= 0) sum += t[j--] - '0'; carry = sum / 10; result[k--] = sum % 10 + '0';// + '0'表示数字转为字符 } return (result[k+1] != '\0') ? &result[k+1] : result; }
思路解析:
1.利用strlen,求出输入的两个字符串的长度。
2.动态申请一段内存,考虑到进位情况,因此要比输入的字符串中的最大数多一位。
3.利用while循环,从字符数组的最后位开始,分别对每个位进行相加,同时考虑进位的情况。
4.最后要考虑'0'+'0',和'0' + ' '的情况。