作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
文章来源地址https://www.toymoban.com/news/detail-598120.html
思路
题意 -> 给定二个字符串,计算它们的和并同样以字符串形式返回。
直接从尾部向头部进行枚举,模拟实际计算过程,每取一个数就将字符转换为数字,然后计算之后再将其转换为字符存储,最后判断是否存在进位,如果存在进位就将进位也存储。
关于进位的一个技巧,因为和运算,进位只可能有 1,因此在开辟内存的时候就将进位的位置开辟出来,并赋值 为 1,最后返回时,如果存在进位就返回字符串首地址,反之返回字符串首地址 + 1 ---- 去取进位影响。
代码注释超级详细
ps:此题我在去年的时候也做过一次,再回看当时代码时,感慨万千,通过看代码就知道,当时代码水平非常有限,代码写的也非常冗余,经过一年的学习,进步还是非常明显的。各位努力吧!!!
文章来源:https://www.toymoban.com/news/detail-598120.html
代码
char * addStrings(char * num1, char * num2){
int len1 = strlen(num1);
int len2 = strlen(num2);
int len = (len1 > len2 ? len1 : len2) + 2;
char *ans = malloc(sizeof(char) * len);
memset(ans, 0, len);//初始化
ans[0] = '1';//进位赋值
int c = 0;//记录进位
for (int i = len - 2; i > 0; i--) {
int sum = 0;//记录和
if (len1 > 0) {//取数
sum += (num1[len1 - 1] - '0');
--len1;
}
if (len2 > 0) {//取数
sum += (num2[len2 - 1] - '0');
--len2;
}
sum += c;//加上一位的进位
c = sum / 10;//保存进位
sum %= 10;//保存当前位
ans[i] = sum + '0';//字符存储
}
return c ? ans : ans+1;//判断进位返回对应地址
}
作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
char * addStrings(char * num1, char * num2){
int num1_len = strlen(num1);
int num2_len = strlen(num2);
int len_1 = num1_len-1;
int len_2 = num2_len-1;
int max_len = num1_len>num2_len ? num1_len : num2_len;
char * num = malloc(sizeof(char) * (max_len+2));
int i =0,sum = 0,max = max_len+2;
while(len_1>=0&&len_2>=0)
{
sum = (num1[len_1--]-'0')+(num2[len_2--]-'0')+i;
i = sum/10;
sum = sum%10;
num[max_len--] = sum+'0';
}
while(len_1>=0)
{
sum = (num1[len_1--]-'0')+i;
i = sum/10;
sum = sum%10;
num[max_len--] = sum+'0';
}
while(len_2>=0)
{
sum = (num2[len_2--]-'0')+i;
i = sum/10;
sum = sum%10;
num[max_len--] = sum+'0';
}
if(i>0)
{
num[0] = i+'0';
num[max-1] ='\0';
return num;
}
num[max-1] ='\0';
return ++num;
}
作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
到了这里,关于LeetCode·每日一题·415. 字符串相加·模拟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!