题解 | 大数加法
大数加法
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' + ' '的情况。

