一、题目
链接:
415. 字符串相加 - 力扣(LeetCode)
函数原型:char* addStrings(char* num1, char* num2)
二、思路:
本题本质是将两个字符型数字相加,字符型数字相加就一定需要进行字符与数字的相互转换
详见文章:字符与数字的相互转换-CSDN博客
模拟竖式运算即可:将字符型数字的每一位转换为整型数字相加,由于可能存在进位,所以需要将计算的结果倒置存储,这样就不必担心是否进位的问题使接收结果的字符串前多留一个位置。
三、代码
void reserve(char* str)//逆置字符串函数 { int len = strlen(str); int left = 0; int right = len - 1; while (left <= right) { char tmp = str[left]; str[left] = str[right]; str[right] = tmp; left++; right--; } } char* addStrings(char* num1, char* num2) { int len1=strlen(num1); int len2=strlen(num2); int len=len1>len2?len1+2:len2+2; char *ans=(char*)calloc(len,sizeof(char));//多申请两个空间,一个空间位用于进位,一个空间用于存放\0 int add=0;//进位 int result=0;//某一位计算结果 int i=0,j1=len1-1,j2=len2-1;//下标 while(j1>=0||j2>=0||add!=0) { int x=j1>=0?num1[j1--]-'0':0;//对于位数短的字符数字进行补0操作 int y=j2>=0?num2[j2--]-'0':0;//对于位数短的字符数字进行补0操作 result=x+y+add; ans[i++]=result%10+'0'; add=result/10;//进位 } reserve(ans);//由于我们是逆置存储的,需要再次逆置 return ans;//返回结果 }