给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
题解:
1.计算两个字符串形式的和
2.整数为非负形式
3.整数长度小于 5100
提示:
num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
解题思路:
整数长度够长,大数相加模拟十进制加法过程,一个位置上相加满十进一,对十取余为结果数,取整得到的数作为进位模拟加法过程
C/C++题解:
class Solution {
public:
string addStrings(string num1, string num2) {
string ans;
int carry = 0;//进位
int i=num1.size()-1, j=num2.size()-1;
while(i>=0 || j>=0 || carry!=0){
//数字没计算完或者有进位仍进行运算
if(i>=0){carry += num1[i]-'0';
i -= 1;}//从个位模拟
if(j>=0){
carry += num2[j]-'0';
j -= 1;}
ans += to_string(carry%10);//满十进一
carry = carry/10;}//进位
reverse(ans.begin(), ans.end());
return ans;
// string ans;
// int na[5100]={0},nb[5100]={0};
// int la=num1.size();
// int lb=num2.size();
// // 倒叙存储
// for(int i=0;i
// na[la-1-i]=num1[i]-'0';
// // 倒叙存储
// for(int i=0;i
// nb[lb-1-i]=num2[i]-'0';
// int lmax=la>lb?la:lb;
// // 从个位开始计算
// for(int i=0;i{
// na[i]+=nb[i];
// na[i+1]+=na[i]/10;
// na[i]%=10;}
// // 去除前置0
// if(!na[lmax])
// lmax--;
// for(int i=lmax;i>=0;i--)
// ans+=na[i]+'0';
// return ans;
}};
Debug结果:
Java题解:
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder ans= new StringBuilder();
int carry = 0;//进位
int i=num1.length()-1, j=num2.length()-1;
while(i>=0 || j>=0 || carry!=0){
//数字没计算完或者有进位仍进行运算
if(i>=0){
carry += num1.charAt(i)-'0';
i -= 1; }//从个位模拟
if(j>=0){
carry += num2.charAt(j)-'0';
j -= 1; }
ans.append(carry%10);//满十进一
carry = carry/10;}//进位
return ans.reverse().toString();}}
Debug结果:
Python题解:
class Solution(object):
def addStrings(self, num1, num2):
""":type num1: str:type num2: str
:rtype: str"""
ans = ''
carry = 0 #进位
i, j=len(num1)-1, len(num2)-1
while i>=0 or j>=0 or carry!=0:
#数字没计算完或者有进位仍进行运算
if i>=0:
carry += int(num1[i])
i -= 1 #从个位模拟
if j>=0:
carry += int(num2[j])
j -= 1
ans += str(carry%10) #满十进一
carry = carry/10 #进位
return ans[::-1]
Debug结果:
例题来自力扣网https://leetcode-cn.com/
欢迎评论后台留言交流~