题目描述:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
思路:
我们定义两个指针 i 和 j 分别指向 num 1 和num 2 的末尾,即最低位,同时定义一个变量add 维护当前是否有进位,然后从末尾到开头逐位相加即可。你可能会想两个数字位数不同怎么处理,这里我们统一在指针当前下标处于负数的时候返回 0,等价于对位数较短的数字进行了补零操作。
c++ 代码:
int(string num1, string num2) {
int i = num1.size()-1,j = num2.size()-1;
int add =0;
string ans = "";
while(i>=0||j>=0||add!=0)
{
int x = i>=0?num1[i]-'0':0;
int y = j>=0?num2[j]-'0':0;
int result = x+y+add;
ans.push_back('0'+result%10);
add=result/ 10; //进位
i--;
j--;
}
reverse(ans.begin(),ans.end());
return ans;
}
c语言代码:
char* addStrings(char* num1, char* num2) {
int i = strlen(num1) - 1, j = strlen(num2) - 1, add = 0;
char* ans = (char*)malloc(sizeof(char) * (fmax(i, j) + 3));
int len = 0;
while (i >= 0 || j >= 0 || add != 0) {
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int result = x + y + add;
ans[len++] = '0' + result % 10;
add = result / 10;
i--, j--;
}
int left = 0,right = len-1;
while(left<right){
char ch = ans[left];
ans[left] = ans[right]
ans[right] = ch;
left++;
right--;
}
ans[len++] = 0;//字符串末尾添加0
return ans;
}
-fmax
:math.h中的函数,使用时需要在.c文件中include<math.h>
作用是返回两个浮点参数中较大的一个