今天和大家聊的问题叫做 字符串相加,我们先来看题面:https://leetcode-cn.com/problems/add-strings/
Given two non-negative integers, num1 and num2 represented as string, return the sum of num1 and num2 as a string.
You must solve the problem without using any built-in library for handling large integers (such as BigInteger). You must also not convert the inputs to integers directly.
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例
示例 1: 输入:num1 = "11", num2 = "123" 输出:"134" 示例 2: 输入:num1 = "456", num2 = "77" 输出:"533" 示例 3: 输入:num1 = "0", num2 = "0" 输出:"0"
解题
题目分析:设置两个变量i,j分别从num1和num2的后面开始遍历,取对应位置的数字、前面计算所得进位相加的carry,carry对10的余数放入到结果中,carry/=10。因为两个字符串长度可能不同,要记得处理剩余的字符。最后记得carry可能不等于0,要对其进行处理 .
class Solution { public: string addStrings(string num1, string num2) { int i=num1.size()-1,j=num2.size()-1,carry=0; string ans; while(i>=0&&j>=0){ carry+=(num1[i]-'0')+(num2[j]-'0'); //从两个字符串的后面开始相加,记得加上进位 ans.push_back(carry%10+'0'); //将本位的求和结果放到结果中 carry/=10; --i;--j; } while(i>=0){ //和下面的while,这两个只会执行其中的一个 carry+=(num1[i]-'0'); ans.push_back(carry%10+'0'); carry/=10; --i; } while(j>=0){ carry+=(num2[j]-'0'); ans.push_back(carry%10+'0'); carry/=10; --j; } while(carry!=0){ //最后记得处理可能不为0的carry ans.push_back(carry%10+'0'); carry/=10; } reverse(ans.begin(),ans.end()); //将结果字符串进行翻转 return ans; } };
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。